编写好XSD文件,然后来看怎么使用XSD文件校验,并解析SqlMapper文件,也就是实现doParseSqlMapperResourceWithSchema()方法。

为了实现这个功能,有两个基本要求:

(1)兼容性:需要兼容mybatis的原生配置,兼容有两种层级,一种是使用DTD校验,这个前面已经说了,走原来的流程,兼容性没有问题;另一种就是走XSD校验,但也需要兼容mybatis原生配置,这种兼容性一方面从上面修改的XSD文件去保证,另一方面也需要从XML的解析去保证。

(2)扩展性:修改的目的就是为了扩展性,所以扩展性也是一个基本要求。但是扩展性不是随意性,也需要按照规范来扩展,这个规范就是自定义的XSD文件。

为了达到这两个基本要求,下面是我的一种思路,主要借鉴于Spring的自定义命名空间:

1、创建一个EntityResolver,读取类路径下指定模式的配置文件,比如:"classpath*:**/dysd-*-namespaces.ini"

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

aaarticlea/png;base64,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" alt="" />

使用命名空间作为Section的名称,下面的schema、parser分别表示命名空间的xsd文件和解析器实现类,这样就可以根据XML中的XSD命名空间找到校验文件,并且有一个解析入口了。

说明:

  1. apache的commons-configuration提供了ini格式文件的读取API
  2. Spring中使用META-INF/spring.schemas和META-INF/spring.handlers来存储XSD文件和解析器实现类,这里我修改为使用ini文件集中配置
  3. 因为读取的是所有类路径下满足通配符的ini文件,因此可以非常简单的扩展其它命名空间,至于在Java中具体怎么使用XSD来校验,这里就不细说了

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

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

解析器接口如下:

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)通用解析上下文:

public interface IParserContext {
public ProblemReporter getProblemReporter();
public EventListener getEventListener();
public SourceExtractor getSourceExtractor();
public Environment getEnvironment();
}

相应层级的解析器实现类主要负责加载被解析文件(比如将字符串通配符加载为Resource对象集合),保证不重复解析,保证可并发执行等。

(2)XML解析上下文

public interface IXmlParserContext extends IParserContext{
public boolean isNamespaceAware();
public DocumentLoader getDocumentLoader();
public EntityResolver getEntityResolver();
public ErrorHandler getErrorHandler();
public XmlParserDelegate getDelegate();
}

相应层级的解析器实现类主要负责将Resource转换为Document对象,并在转换的过程中进行校验。

(3)SqlMapper解析上下文

public interface ISqlMapperParserContext extends IXmlParserContext{
public Configuration getConfiguration();
}

相应层级的解析器实现类主要负责查找根元素所在命名空间的解析器,并使用解析器对Document进行解析。

最终,将解析委托给ini配置文件中的SchemaSqlMapperNamespaceParser类,但是因为这个类需要在文本文件中配置,不方便有参数的构造函数,因而进一步委托给SchemaSqlMapperParserDelegate:

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)的更多相关文章

  1. 使用XSD校验Mybatis的SqlMapper配置文件(1)

    这篇文章以前面对SqlSessionFactoryBean的重构为基础,先简单回顾一下做了哪些操作: 新建SqlSessionFactoryBean,初始代码和mybatis-spring相同: 重构 ...

  2. Mybatis中SqlMapper配置的扩展与应用(3)

    隔了两周,首先回顾一下,在Mybatis中的SqlMapper配置文件中引入的几个扩展机制: 1.引入SQL配置函数,简化配置.屏蔽DB底层差异性 2.引入自定义命名空间,允许自定义语句级元素.脚本级 ...

  3. 优化与扩展Mybatis的SqlMapper解析

    接上一篇博文,这一篇来讲述怎么实现SchemaSqlMapperParserDelegate——解析SqlMapper配置文件. 要想实现SqlMapper文件的解析,还需要仔细分析一下mybatis ...

  4. Mybatis中SqlMapper配置的扩展与应用(1)

    奋斗了好几个晚上调试程序,写了好几篇博客,终于建立起了Mybatis配置的扩展机制.虽然扩展机制是重要的,然而如果没有真正实用的扩展功能,那也至少是不那么鼓舞人心的,这篇博客就来举几个扩展的例子. 这 ...

  5. mybatis源码配置文件解析之二:解析settings标签

    在前边的博客中分析了mybatis解析properties标签,<mybatis源码配置文件解析之一:解析properties标签>.下面来看解析settings标签的过程. 一.概述 在 ...

  6. mybatis源码配置文件解析之五:解析mappers标签(解析XML映射文件)

    在上篇文章中分析了mybatis解析<mappers>标签,<mybatis源码配置文件解析之五:解析mappers标签>重点分析了如何解析<mappers>标签中 ...

  7. mybatis 加载配置文件的方法

    一.  使用sqlSessionFactory 的 mapperLocations 进行加载 <!-- SessionFactory --> <bean id="sqlSe ...

  8. MyBatis 创建核心配置文件和 SQL 映射文件

    Mybatis 的两个配置文件(mybatis-config.xml  和 xxxMapper.xml)都为 xml 类型,因此在 eclipse 中创建 xml 文件命名为相应的 mybatis-c ...

  9. IDEA中写MyBatis的xml配置文件编译报错的坑

    IDEA中写MyBatis的xml配置文件编译报错的坑 说明:用IDEA编译工具在项目中使用Mybatis框架,编写mybatis-config.xml和Mapper.xml配置文件时,编译项目出现错 ...

随机推荐

  1. Java中区别.toString() ,(String),valueOf()方法

    在java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能.本文将对常用的转换方法进行一个总结.常用的方法有Object.toString(),(String)要转换的对象,St ...

  2. IOS绘制渐变背景色折线图的一种尝试

    1.绘制折线图 上次在群里看到一个折线图划的很漂亮,自己想实现一个这样的 ,但是一直没什么头绪,不知道怎么做,就开始在网上查找划线,绘 制渐变色这一块的内容,用最笨的方式,自己尝试的写了一些,也没 有 ...

  3. 搭建一个SSH项目框架的步骤

    1.导入jar包(38个) 2.配置文件 applicationContext,xml (beans.xml) (数据源.LocalSessionFactoryBean.事务管理器.事务通知.AOP切 ...

  4. NYOJ 737 石子合并(一)

    分析: 本题为区间型动态规划,dp[i][j] 表示从第 i 堆合并到第 j 堆的最小代价, sum[i][i] 表示第 i 堆到第 j 堆的石子总和,则动态转移方程: dp[i][j] = min( ...

  5. webuploader 断点续传

    webuploader 实现 断点续传webuploader是百度开发的上传文件前端控件.可支持html5和flash,因此对浏览器的兼容比较好.因为需要用到ie8,ie8不支持html5,所以必须支 ...

  6. CentOS7 服务器 JDK+TOMCAT+MYSQL+redis 安装日志

    防火墙配置(参考 CentOS7安装iptables防火墙) 检查是否安装iptables #先检查是否安装了iptables service iptables status #安装iptables ...

  7. jdbc autoReconnect=true 参数设置导致 slow log 爆表。

    1.过程 同事按照文档上配置了下面的jdbc url: jdbc:mysql://ip:port/db?autoReconnect=true&useUnicode=true&chara ...

  8. Linux之RPM安装软件

    源码包 (可以看到源代码)      脚本安装包(写好的xsheel一键安装.本质还是源码包和二进制包) 二进制包(RPM包.系统默认包)      包管理系统简单,通过命令就可以安装.卸载     ...

  9. C# Entity Framework查询小技巧 NoTracking

    在使用Entity Framework做查询的时候,如果只需要显示,而不用保存实体,那么可以用AsNoTracking()来获取数据. 这样可以提高查询的性能. 代码如下: var context = ...

  10. PowerShell笔记

    教程: http://www.pstips.net/powershell-online-tutorials/ http://www.3fwork.com/a113/ 1. 查看成员 $MyInvoca ...