一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|

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

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

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

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

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

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

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

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

現(xiàn)在來看怎么擴展,首先創(chuàng)建SchemaSqlSessionFactoryBean,繼承重構(gòu)后的SqlSessionFactoryBean,在XML配置中同步修改為新建的類:

?
1
2
public class SchemaSqlSessionFactoryBean extends SqlSessionFactoryBean {
}

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

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

當(dāng)然,為了兼容性,需要先判斷是否為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配置文件的校驗?zāi)J剑壿嬌弦埠芎唵危褪且恍幸恍凶x,在正文開始前,發(fā)現(xiàn)有dtd定義,就返回DTD模式,否則返回XSD模式(實際上,不止是偵測模式借用了Spring,后面的自定義命名空間也借鑒了Spring)。

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

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

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

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

這里分成三個層級:

(1)根元素(mapper元素):對應(yīng)一個SqlMapper文件,有一個namespace屬性,表示它的子元素的一個邏輯分類。需注意的是,這里的namespace屬性不同于XML命名空間,前者是mybatis自身的一個邏輯分類,后者是用于定義XML文件中可以出現(xiàn)的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腳本的文本,以及動態(tài)腳本元素,稱之為腳本級script元素

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

(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元素,允許出現(xiàn)其它命名空間的元素

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

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

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

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

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

(6)其它的一些優(yōu)化,比如將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配置文件小結(jié),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對服務(wù)器之家網(wǎng)站的支持!

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美日韩精品在线观看 | 国产中文视频 | 天仙tv微福视频 | 深夜免费在线视频 | 国产成人精品系列在线观看 | 99久久国产综合精品麻豆 | 亚洲国产在线综合018 | 狠狠色伊人亚洲综合网站色 | 欧美日韩亚洲区久久综合 | 亚洲精品老司机福利在线播放 | 欧洲女同同性videos0 | 欧美影院一区二区 | 女人特黄大aaaaaa大片 | 兽皇日本 | 色综合天天综合网站中国 | ssni-497新任美脚女教师 | 男人使劲躁女人视频免费 | 免费大片| 99视频在线看 | 国产成人亚洲综合网站不卡 | 99在线在线视频免费视频观看 | 国产美女操 | 国产成人一区二区三区 | 精品无人区乱码1区2区3区免费 | 色婷婷婷婷 | 亚洲成人一区在线 | 亚洲人成绝费网站色ww | 欧美日韩亚洲一区二区三区在线观看 | 亚洲欧美日韩国产精品一区 | 性xxxx18学生第一次出血 | 亚洲精品动漫在线观看 | 91精品国产综合久久香蕉 | 精品无码一区二区三区中文字幕 | 无码任你躁久久久久久久 | 成年人免费在线看的惊悚动作片 | 亚洲精品一区在线观看 | 蜜桃成熟3在线观看 | 2021国产麻豆剧传媒剧情最新 | 嫩草精品 | 成人蜜桃网 | 国产好深好硬好爽我还要视频 |