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

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

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

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

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

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

這篇文章主要介紹了使用XSD校驗Mybatis的SqlMapper配置文件的方法(2)的相關資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下

在上篇文章給大家介紹了使用XSD校驗Mybatis的SqlMapper配置文件的方法(1),需要的朋友可以參考下。

編寫好XSD文件,然后來看怎么使用XSD文件校驗,并解析SqlMapper文件,也就是實現doParseSqlMapperResourceWithSchema()方法。

為了實現這個功能,有兩個基本要求:

(1)兼容性:需要兼容mybatis的原生配置,兼容有兩種層級,一種是使用DTD校驗,這個前面已經說了,走原來的流程,兼容性沒有問題;另一種就是走XSD校驗,但也需要兼容mybatis原生配置,這種兼容性一方面從上面修改的XSD文件去保證,另一方面也需要從XML的解析去保證。

(2)擴展性:修改的目的就是為了擴展性,所以擴展性也是一個基本要求。但是擴展性不是隨意性,也需要按照規范來擴展,這個規范就是自定義的XSD文件。

為了達到這兩個基本要求,下面是我的一種思路,主要借鑒于Spring的自定義命名空間:

1、創建一個EntityResolver,讀取類路徑下指定模式的配置文件,比如:"classpath*:**/dysd-*-namespaces.ini"

2、在ini文件中定義命名空間元信息,如:

使用命名空間作為Section的名稱,下面的schema、parser分別表示命名空間的xsd文件和解析器實現類,這樣就可以根據XML中的XSD命名空間找到校驗文件,并且有一個解析入口了。

說明:

apache的commons-configuration提供了ini格式文件的讀取API

Spring中使用META-INF/spring.schemas和META-INF/spring.handlers來存儲XSD文件和解析器實現類,這里我修改為使用ini文件集中配置

因為讀取的是所有類路徑下滿足通配符的ini文件,因此可以非常簡單的擴展其它命名空間,至于在Java中具體怎么使用XSD來校驗,這里就不細說了

我把XML的解析分解為三要素:解析上下文、解析器、被解析文件。doParseSqlMapperResourceWithSchema()方法也很簡潔:

?
1
2
3
4
protected void doParseSqlMapperResourceWithSchema(Configuration configuration, Resource mapperLocation){
ISqlMapperParserContext context = new SqlMapperParserContext(configuration);
XmlParserUtils.parseXml(context, mapperLocation);
}

解析器接口如下:

?
1
2
3
4
5
6
public interface IParser<E extends IParserContext> {
public void parse(E parserContext, String location);
public void parse(E parserContext, String[] locationPatterns);
public void parse(E parserContext, InputStream inputStream);
public void parse(E parserContext, Resource resource);
}

解析上下文和解析器實現類又依次分為三個層級:

(1)通用解析上下文:

?
1
2
3
4
5
6
public interface IParserContext {
public ProblemReporter getProblemReporter();
public EventListener getEventListener();
public SourceExtractor getSourceExtractor();
public Environment getEnvironment();
}

相應層級的解析器實現類主要負責加載被解析文件(比如將字符串通配符加載為Resource對象集合),保證不重復解析,保證可并發執行等。

(2)XML解析上下文

?
1
2
3
4
5
6
7
public interface IXmlParserContext extends IParserContext{
public boolean isNamespaceAware();
public DocumentLoader getDocumentLoader();
public EntityResolver getEntityResolver();
public ErrorHandler getErrorHandler();
public XmlParserDelegate getDelegate();
}

相應層級的解析器實現類主要負責將Resource轉換為Document對象,并在轉換的過程中進行校驗。

(3)SqlMapper解析上下文

?
1
2
3
public interface ISqlMapperParserContext extends IXmlParserContext{
public Configuration getConfiguration();
}

相應層級的解析器實現類主要負責查找根元素所在命名空間的解析器,并使用解析器對Document進行解析。

最終,將解析委托給ini配置文件中的SchemaSqlMapperNamespaceParser類,但是因為這個類需要在文本文件中配置,不方便有參數的構造函數,因而進一步委托給SchemaSqlMapperParserDelegate:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public class SchemaSqlMapperNamespaceParser implements INamespaceParser<ISqlMapperParserContext> {
@Override
public void init() {
}
@Override
public void parse(ISqlMapperParserContext parserContext, Document document, Resource resource) {
SchemaSqlMapperParserDelegate delegate = new SchemaSqlMapperParserDelegate(parserContext, document, resource);
delegate.parse();
}
@Override
public void destory() {
}
}

至此,XSD校驗已經完成,也已經找到XML解析入口,后續就是在SchemaSqlMapperParserDelegate中真正的解析了。

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

原文鏈接:http://www.cnblogs.com/linjisong/p/6036613.html

延伸 · 閱讀

精彩推薦
  • JAVA教程自定義一個異常類模板的簡單實例

    自定義一個異常類模板的簡單實例

    下面小編就為大家帶來一篇自定義一個異常類模板的簡單實例。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    java教程網3682020-06-20
  • JAVA教程Java線程的控制詳解

    Java線程的控制詳解

    這篇文章主要介紹了Java中的join線程、后臺線程、線程睡眠、線程讓步以及線程的優先級,非常的詳細,希望能對大家有所幫助 ...

    hebedich3652019-12-04
  • JAVA教程Java的面向對象編程基本概念學習筆記整理

    Java的面向對象編程基本概念學習筆記整理

    這篇文章主要介紹了Java的面向對象編程基本概念學習筆記整理,包括類與方法以及多態等支持面向對象語言中的重要特點,需要的朋友可以參考下 ...

    xiaoyao38574352020-03-21
  • JAVA教程java String 轉成Double二維數組的方法

    java String 轉成Double二維數組的方法

    下面小編就為大家帶來一篇java String 轉成Double二維數組的方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 ...

    jingxian2222020-06-23
  • JAVA教程Spark操作之aggregate、aggregateByKey詳解

    Spark操作之aggregate、aggregateByKey詳解

    這篇文章主要介紹了Spark操作之aggregate、aggregateByKey詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    午夜陽光psb3142019-07-08
  • JAVA教程java多線程編程之使用thread類創建線程

    java多線程編程之使用thread類創建線程

    在Java中創建線程有兩種方法:使用Thread類和使用Runnable接口。在使用Runnable接口時需要建立一個Thread實例 ...

    java教程網3552019-11-04
  • JAVA教程Java自學書籍Top 10

    Java自學書籍Top 10

    這篇文章主要為大家推薦了Java書籍Top 10,是由Java Inside推薦的十本不錯的Java書籍,感興趣的小伙伴們可以參考一下 ...

    Java教程網1712020-06-18
  • JAVA教程詳解Java線程編程中的volatile關鍵字的作用

    詳解Java線程編程中的volatile關鍵字的作用

    這篇文章主要介紹了Java線程編程中的volatile關鍵字的作用,針對其禁止進行指令重排序和讀寫內存方面著重講解,需要的朋友可以參考下 ...

    程曉明1562020-03-09
主站蜘蛛池模板: 男人机机桶女人 | 日本激情在线 | 精品视频免费在线观看 | 精品老司机在线视频香蕉 | 国产精品久久毛片完整版 | 二次元美女脱裤子让男人桶爽 | 王王的视频ivk | 美国69xxxx59| 精品无人区麻豆乱码1区2 | 成人伊人亚洲人综合网站222 | 国模娜娜a4u1546全套 | 好猛好紧好硬使劲好大刺激视频 | 成人区精品一区二区毛片不卡 | 美女被草出水 | a级精品九九九大片免费看 a级动漫 | 美女伊人网| 视频网站入口在线看 | 久久中文字幕免费高清 | 国产成人综合网亚洲欧美在线 | 99国产自偷色久 | 国内外成人在线视频 | 91热国内精品永久免费观看 | 亚洲天堂伦理 | 袖珍人与大黑人性视频 | 国产成人精品系列在线观看 | 169pp美女| 成人在线一区二区三区 | 日本三级在线观看免费 | www毛片| 皇上撞着太子妃的秘密小说 | 91国产高清| 欧美va在线播放免费观看 | free极度另类性欧美 | 人人做人人爽人人爱 | 免费免费啪视频在线观播放 | 精品视频在线免费 | 三上悠亚久久国产 | 国产成人免费观看在线视频 | 欧美高清无砖专区欧美精品 | 我和老丈洗澡同性 | 日韩欧美天堂 |