日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sql server解析xml属性为表格_[Mybatis][基础支持层]mapper xml sql 解析

發布時間:2024/1/23 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql server解析xml属性为表格_[Mybatis][基础支持层]mapper xml sql 解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

該系列文章針對 Mybatis 3.5.1 版本

Mybatis 中 標簽解析,主要是為了得到兩大部分數據

1、Mapper.class 接口

2、SQL 執行語句,結果集映射關系等數據

在上一章中提到了 Mapper.class 文件的解析,Mapper.class 是接口文件,該接口是發起SQl執行調用的 API 入口,所有相關的操作都在其代理類 MapperProxy 中完成。

在上一章中忽略了 Mapper.class 文件中 @Select 等 SQL 語句注解的解析,本次章節將和 xml 中的 sql 解析一起分析。

`` 標簽解析入口

來回顧一下,XMLConfigBuilder 解析時序簡圖,如下:

在時序圖中 加載解析在 XMLConfigBuilder#mapperElement 中完成,相關解析代碼如下:

如上述代碼,針對 子標簽的解析分為兩種:掃包批量解析和單個文件解析。

而無論是掃包批量解析亦或者單個文件解析,都會對 xml 文件 和 class 文件進行解析處理。

上一章以單個文件解析為入口分析 Mapper.class 文件的加載。

并提到了單個文件 標簽配置的三種屬性:

  • resource

  • url

  • class

這三種屬性的配置都會嘗試解析 xml 中的數據和 Mapper.class 上的 @Select 等注解,而 resource ?和 url 所配置的直接就是 xml 路徑,加載了 xml 通過命名空間即可找到關聯對應的 Mapper.class 進行解析。

而 class 配置,如果要找到對應的 xml 文件,需要按照既定的規約給 xml 文件命名,規約為:Mapper.class.getName() + .xml

本次 sql 相關解析以單個文件的 resource 配置解析為入口展開,對應的解析入口代碼為

從代碼中,能夠知道完成 xml 文件解析的類為 XMLMapperBuilder,而進行解析的入口方法為 XMLMapperBuilder#parse。

來具體看看 XMLMapperBuilder#parse XML 文件解析入口代碼

如上述代碼,解析入口職責也很清晰,對 xml 文件和 mapper ?class 文件進行了解析。

下面分別進入到各自的方法中查看各自是如何進行 sql 解析的。

xml 文件解析

xml 文件解析代碼入口方法 XMLMapperBuilder#configurationElement

相關代碼如下:

在上述解析代碼中,針對 xml 文件中的各種標簽進行解析,如 、、、 等。

解析后的結果會被存儲到 Configuration 中,例如:

解析后的結果存儲在 Configuration 的 caches 屬性中,該屬性定義如下

/** 容器:存放 Mapper.xml 中的 構建的 Cache **//** key:為 Mapper.xml 中的 namespace **/protected final Map caches = new StrictMap<>("Caches collection");

解析后的結果存儲在 Configuration 中的 resultMaps 屬性中,該屬性定義如下

/** 容器:存放 Mapper.xml 中的 構建的 ResultMap 對象 **//** key 通常為:namespace + "." + id【 中的id屬性值】 **/protected final Map<String, ResultMap> resultMaps = new StrictMap<>("Result Maps collection");

等標簽的解析會由新的對象 XMLStatementBuilder 進行解析,解析后的結果存儲在Configuration 中的 mappedStatements 屬性中,該屬性定義如下:

/** 容器:存放 Mapper.xml 文件中 標簽的解析數據 **//** key = namespace + id 屬性 = Mapper.java 全類名 + id 屬性 **/protected final Map<String, MappedStatement> mappedStatements = new StrictMap("Mapped Statements collection") .conflictMessageProducer((savedValue, targetValue) -> ". please check " + savedValue.getResource() + " and " + targetValue.getResource());

針對 xml 文件的解析,都是解析 標簽,然后根據解析信息構建對應的 Java 對象,最終把這些數據填充到 Configuration 對象屬性中。

更多解析細節,自行翻閱相關源碼

mapper class 綁定 xml 文件數據時,同時解析注解

在 mybatis 中,除了能夠在 xml 文件中配置數據,如:sql數據通過 等標簽,緩存通過 標簽進行配置,同樣的這些配置信息也支持有注解配置,該注解配置可以配置在相應的 mapper class 文件中。

來看一個 mapper class 的文件定義,代碼如下:

如上述代碼 @Select 對應的xml文件中的 ,@CacheNamespace 對應 xml 文件中的

更多配置,參考 mybatis 官網,或者 mybatis 源碼

從語義上來說,注解配置和xml配置并沒有區別,區別在于聲明的方式,一個 xml 標簽,一個java代碼注解
區別還在于解析構建類的不同,xml 解析在 XMLStatementBuilder 中完成,注解解析在 MapperAnnotationBuilder 中完成。

來看一下注解解析代碼 MapperAnnotationBuilder#parse

如上述代碼,通過解析注解完成相關配置信息的讀取,如:緩存配置,SQL等。

同樣的相關解析后的數據和 xml 解析后的數據一樣,并存儲在 Configuration 對應的容器中。

總結

xml 文件關于 sql 的解析或者標簽的解析和 mapper class 關于注解式sql等解析方式不同。

xml 中關于 sql 的解析,在 XMLStatementBuilder 中完成。

mapper class 中關于 sql 的解析在 MapperAnnotationBuilder 中完成。

雖然 xml 和 注解的配置形式不同,但是他們所表達語義是相同的,解析后對應的 java 對象結構也是相同,這些解析數據,會被存放在 Configuration 對象中。

標簽解析完 xml 文件和關聯的 mapper class 文件后,Mybaits 中 Configuration 對象內容如下:

End

總結

以上是生活随笔為你收集整理的sql server解析xml属性为表格_[Mybatis][基础支持层]mapper xml sql 解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。