激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|

香港云服务器
服務器之家 - 編程語言 - JAVA教程 - 使用XSD校驗Mybatis的SqlMapper配置文件的方法(1)

使用XSD校驗Mybatis的SqlMapper配置文件的方法(1)

2020-07-01 11:39linjisong JAVA教程

這篇文章以前面對SqlSessionFactoryBean的重構為基礎,簡單的介紹了相關操作知識,然后在給大家分享使用XSD校驗Mybatis的SqlMapper配置文件的方法,感興趣的朋友參考下吧

這篇文章以前面對SqlSessionFactoryBean的重構為基礎,先簡單回顧一下做了哪些操作:

新建SqlSessionFactoryBean,初始代碼和mybatis-spring相同;

重構buildSqlSessionFactory()方法,將眾多的if語句抽取為一組小方法,預留自定義配置的方法,同時添加常用屬性的getter方法;

提取組件工廠接口,并提供組件創建工具類SqlSessionComponetFactorys,將散落在不同地方的new Xxx()集中管理,便于組件的替換。

現在來看怎么擴展,首先創建SchemaSqlSessionFactoryBean,繼承重構后的SqlSessionFactoryBean,在XML配置中同步修改為新建的類:

?
1
2
public class SchemaSqlSessionFactoryBean extends SqlSessionFactoryBean {
}

對于一些簡單的功能擴展,比如設置默認結果類型,掃描指定的類型簡稱,這里就不過多討論了,這里集中講述怎么擴展為使用XSD校驗SqlMapper配置。

一、覆蓋SqlSessionFactoryBean中的doParseSqlMapperResource()方法,這個方法的作用是解析一個SqlMapper配置文件

當然,為了兼容性,需要先判斷是否為DTD,如果是DTD,按原方法解析,否則按自定義方法解析:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package org.dysd.dao.mybatis.schema;
import org.apache.ibatis.executor.ErrorContext;
import org.apache.ibatis.session.Configuration;
import org.springframework.core.NestedIOException;
import org.springframework.core.io.Resource;
import org.springframework.util.xml.XmlValidationModeDetector;
public class SchemaSqlSessionFactoryBean extends SqlSessionFactoryBean {
@Override
protected void doParseSqlMapperResource(Configuration configuration, Resource mapperLocation)
throws NestedIOException {
int mode = detectValidationMode(mapperLocation);
if(mode == XmlValidationModeDetector.VALIDATION_DTD){//如果是DTD,使用Mybatis官方的解析
super.doParseSqlMapperResource(configuration, mapperLocation);
}else{
try {
// 使用Schema校驗
this.doParseSqlMapperResourceWithSchema(configuration, mapperLocation);
} catch (Exception e) {
throw new NestedIOException("Failed to parse mapping resource: '" + mapperLocation + "'", e);
} finally {
ErrorContext.instance().reset();
}
}
}
protected void doParseSqlMapperResourceWithSchema(Configuration configuration, Resource mapperLocation){
}
private int detectValidationMode(Resource mapperLocation) throws NestedIOException {
int mode = -1;
try {
XmlValidationModeDetector detector = new XmlValidationModeDetector();
mode = detector.detectValidationMode(mapperLocation.getInputStream());
} catch (Exception e) {
throw new NestedIOException("Failed to parse mapping resource: '" + mapperLocation + "'", e);
} finally {
ErrorContext.instance().reset();
}
return mode;
}
}

這里借用了Spring中的XmlValidationModeDetector來偵測XML配置文件的校驗模式,邏輯上也很簡單,就是一行一行讀,在正文開始前,發現有dtd定義,就返回DTD模式,否則返回XSD模式(實際上,不止是偵測模式借用了Spring,后面的自定義命名空間也借鑒了Spring)。

至此,對SqlMapper配置文件的解析工作已經分為兩支,兼容mybatis官方的解析,并將XSD模式下的解析導航到方法doParseSqlMapperResourceWithSchema()中。

二、編寫用于校驗SqlMapper的XSD文件(需要有一定的XSD基礎知識,可參考本博客中關于XML部分的學習筆記)

1、先使用一款XML工具,將Mybatis的DTD文件轉換為原始的XSD文件,有很多XML工具有這種功能,可以網上搜索一下

使用XSD校驗Mybatis的SqlMapper配置文件的方法(1)

這里分成三個層級:

(1)根元素(mapper元素):對應一個SqlMapper文件,有一個namespace屬性,表示它的子元素的一個邏輯分類。需注意的是,這里的namespace屬性不同于XML命名空間,前者是mybatis自身的一個邏輯分類,后者是用于定義XML文件中可以出現的xml元素和屬性約束。

(2)一級子元素(cache|cache-ref|resultMap|parameterMap|sql|insert|update|delete|select):mapper的一級子元素,因為mybatis框架對一級子元素有不同處理,所以這里單獨作為一個層級,因為主要是增刪改查語句,所以稱之為語句級statement元素

(3)其它要素(SQL配置文本,include|trim|where|set|foreach|choose|if):用于配置SQL腳本的文本,以及動態腳本元素,稱之為腳本級script元素

2、在生成XSD文件基礎之上做如下修改

(1)添加命名空間,比如:

?
1
2
3
4
5
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns="http://dysd.org/schema/sqlmapper"
targetNamespace="http://dysd.org/schema/sqlmapper"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" version="1.0">

(2)將一級元素包裝為一個元素組statementGroup

使用XSD校驗Mybatis的SqlMapper配置文件的方法(1)

(3)修改mapper元素,允許出現其它命名空間的元素

使用XSD校驗Mybatis的SqlMapper配置文件的方法(1)

(4)將動態腳本元素包裝為一個元素組dynaScriptGroup,并允許出現其它命名的元素

使用XSD校驗Mybatis的SqlMapper配置文件的方法(1)

(5)使用dynaScriptGroup替換出現動態腳本元素的地方,比如<select>元素

使用XSD校驗Mybatis的SqlMapper配置文件的方法(1)

(6)其它的一些優化,比如將statementType可以取的三個值STATEMENT、PREPARED、CALLABLE定義為枚舉類型:

?
1
2
3
4
5
6
7
<xsd:simpleType name="statementType">
<xsd:restriction base="xsd:token">
<xsd:enumeration value="STATEMENT" />
<xsd:enumeration value="PREPARED" />
<xsd:enumeration value="CALLABLE" />
</xsd:restriction>
</xsd:simpleType>

類似的還有parameterMode、jdbcType、javaType等等。

以上所述是小編給大家介紹的使用XSD校驗Mybatis的SqlMapper配置文件小結,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://www.cnblogs.com/linjisong/archive/2016/11/06/6023526.html

延伸 · 閱讀

精彩推薦
350
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 国产成人高潮免费观看精品 | 色骚综合 | 久久久久久久久久一本门道91 | 9191久久久久视频 | 精品中文一区 | 亚洲片在线观看 | 久久亚色 | 一区二区三区日韩电影 | 视频一区二区不卡 | chinese乱子伦xxxx国语对白 | av在线免费观看国产 | 日本中文视频 | 成人午夜激情视频 | 欧美一级黄| 精品成人国产在线观看男人呻吟 | 欧美亚洲国产一区二区三区 | 久久成人激情视频 | 欧美黄一区 | 1级黄色毛片 | 久久精品视频69 | 欧美一级片免费在线观看 | 久久探花 | 91久久国产 | 中文字幕在线观看91 | 九九视频久久 | 美国av片在线观看 | a级在线 | 香蕉成人在线视频 | 在线成人精品视频 | wwwav国产| 天天操天天碰 | 国产一级淫片免费看 | 欧美第1页| 狠狠干五月 | 精品成人av一区二区在线播放 | 91精品国产一区二区三区动漫 | 中韩毛片 | 国产一级一区二区 | 欧美日韩色 | 久久久婷婷一区二区三区不卡 | 国产成人精品免费视频大全最热 |