最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2016年11月07日 09:12:30   作者:linjisong  
這篇文章以前面對(duì)SqlSessionFactoryBean的重構(gòu)為基礎(chǔ),簡(jiǎn)單的介紹了相關(guān)操作知識(shí),然后在給大家分享使用XSD校驗(yàn)Mybatis的SqlMapper配置文件的方法,感興趣的朋友參考下吧

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

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

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

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

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

public class SchemaSqlSessionFactoryBean extends SqlSessionFactoryBean {
}

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

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

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

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校驗(yàn)
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來(lái)偵測(cè)XML配置文件的校驗(yàn)?zāi)J?,邏輯上也很?jiǎn)單,就是一行一行讀,在正文開始前,發(fā)現(xiàn)有dtd定義,就返回DTD模式,否則返回XSD模式(實(shí)際上,不止是偵測(cè)模式借用了Spring,后面的自定義命名空間也借鑒了Spring)。

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

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

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

這里分成三個(gè)層級(jí):

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

(2)一級(jí)子元素(cache|cache-ref|resultMap|parameterMap|sql|insert|update|delete|select):mapper的一級(jí)子元素,因?yàn)閙ybatis框架對(duì)一級(jí)子元素有不同處理,所以這里單獨(dú)作為一個(gè)層級(jí),因?yàn)橹饕窃鰟h改查語(yǔ)句,所以稱之為語(yǔ)句級(jí)statement元素

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

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

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

<?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)將一級(jí)元素包裝為一個(gè)元素組statementGroup

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

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

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

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

<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校驗(yàn)Mybatis的SqlMapper配置文件小結(jié),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Jar包如何導(dǎo)入本地maven倉(cāng)庫(kù)

    Jar包如何導(dǎo)入本地maven倉(cāng)庫(kù)

    將本地jar包導(dǎo)入本地maven倉(cāng)庫(kù),可以通過maven命令-Dfile、-DgroupId、-DartifactId、-Dversion、-Dpackaging指定jar包的詳細(xì)信息,然后執(zhí)行命令即可
    2024-11-11
  • java制作帶界面的聊天工具

    java制作帶界面的聊天工具

    這篇文章主要教大家如何利用java制作帶界面的聊天工具,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Java詳解如何將excel數(shù)據(jù)轉(zhuǎn)為樹形

    Java詳解如何將excel數(shù)據(jù)轉(zhuǎn)為樹形

    在平常的辦公工作中,excel數(shù)據(jù)的操作是最常見的需求,今天就來(lái)看一下通過Java如何來(lái)實(shí)現(xiàn)將excel數(shù)據(jù)轉(zhuǎn)為樹形,感興趣的朋友可以了解下
    2022-08-08
  • 深入剖析Java中的synchronized關(guān)鍵字

    深入剖析Java中的synchronized關(guān)鍵字

    在 Java 程序中,我們可以利用 synchronized 關(guān)鍵字來(lái)對(duì)程序進(jìn)行加鎖,它既可以用來(lái)聲明一個(gè) synchronized 代碼塊,也可以直接標(biāo)記靜態(tài)方法或者實(shí)例方法,本文就帶大家深入了解Java中的synchronized關(guān)鍵字,感興趣的同學(xué)可以參考閱讀
    2023-06-06
  • 關(guān)于使用swagger整合springMVC的方法

    關(guān)于使用swagger整合springMVC的方法

    在平時(shí)開發(fā)寫接口文檔的工作時(shí),一般都是word文檔,帶來(lái)書寫麻煩、維護(hù)麻煩的問題,比如改了源代碼忘了更新文檔、解釋不明確帶來(lái)歧義、無(wú)法在線嘗試等等,swagger可以有效解決這類問題,需要的朋友可以參考下
    2023-04-04
  • SpringBoot應(yīng)用jar包啟動(dòng)原理詳解

    SpringBoot應(yīng)用jar包啟動(dòng)原理詳解

    本文主要介紹了SpringBoot應(yīng)用jar包啟動(dòng)原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • @validated注解異常返回JSON值方式

    @validated注解異常返回JSON值方式

    這篇文章主要介紹了@validated注解異常返回JSON值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • spring boot 1.5.4 集成shiro+cas,實(shí)現(xiàn)單點(diǎn)登錄和權(quán)限控制

    spring boot 1.5.4 集成shiro+cas,實(shí)現(xiàn)單點(diǎn)登錄和權(quán)限控制

    這篇文章主要介紹了spring boot 1.5.4 集成shiro+cas,實(shí)現(xiàn)單點(diǎn)登錄和權(quán)限控制,需要的朋友可以參考下
    2017-06-06
  • Java后臺(tái)生成圖片的完整步驟

    Java后臺(tái)生成圖片的完整步驟

    在一些詳情頁(yè)面中,可能需要對(duì)上傳到服務(wù)器中的圖片生成以縮略圖的形式展示,這篇文章主要給大家介紹了關(guān)于Java后臺(tái)生成圖片的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • SpringBoot 動(dòng)態(tài)定時(shí)器的使用方法

    SpringBoot 動(dòng)態(tài)定時(shí)器的使用方法

    這篇文章主要介紹了SpringBoot 動(dòng)態(tài)定時(shí)器的使用方法,非常不錯(cuò),具有一定的參考借鑒借鑒價(jià)值,需要的朋友可以參考下
    2018-05-05

最新評(píng)論

卢龙县| 和硕县| 利津县| 天全县| 安岳县| 延津县| 永宁县| 道孚县| 长汀县| 唐山市| 隆子县| 安国市| 呼和浩特市| 南和县| 都匀市| 调兵山市| 读书| 宣武区| 巴南区| 迁西县| 北海市| 武宁县| 金昌市| 东辽县| 公安县| 慈溪市| 望城县| 秭归县| 三穗县| 股票| 唐河县| 贡嘎县| 东港市| 秭归县| 德保县| 绍兴县| 株洲县| 信宜市| 永康市| 鸡东县| 海林市|