国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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
主站蜘蛛池模板: 成人自拍视频 | 欧美一级精品 | 亚洲伦理一区 | 免费看黄色一级大片 | 黄色av网站在线观看 | 欧洲av一区二区 | 天天插天天操 | 亚洲一区自拍偷拍 | 欧美视频精品 | 在线观看亚洲一区二区三区 | 九九av | 精品无人乱码一区二区三区的优势 | 希岛爱理一区二区三区av高清 | 欧美成人久久久免费播放 | 亚洲日韩中文字幕一区 | 中文字幕av亚洲精品一部二部 | 综合精品| 国产美女精品视频免费观看 | 在线国产一区二区 | www.国产视频 | 国产成人精品综合 | 九九久久久 | 五月天一区二区 | 国产一区| 国产精品久久久久久久久久免费 | 就操成人网 | 日本精品免费 | 亚洲成av人片在线观看 | 亚洲精品一区 | 久久一区 | 国产精品一区二区免费 | 天天躁日日躁aaaaxxxx | 精品久久久久久久久久久久久久久久久久 | 天天碰天天操 | 男女激情网站 | 黄色a视频 | 97精品久久 | 亚洲精品乱码久久久久久蜜桃麻豆 | 看国产黄色片 | www.夜夜爽| 一区二区免费 |