文档章节

MyBatis整合Spring的实现(3)

tara_qri
 tara_qri
发布于 2015/10/25 11:29
字数 557
阅读 80
收藏 4

分析

MyBatis整合Spring的实现(2)属性可以知道,XPathParser类在XMLConfigBuilder中充当了非常重要的角色,下面就来分析XPathParser的作用

1 属性

1.1 XPathParser属性:

/** 整个XML文档 */
private Document document;
/** 是否已验证,true:是,false:否 */
private boolean validation;
/** 用于解析实体的基本接口 */
private EntityResolver entityResolver;
/** 属性 */
private Properties variables;
/** XPath提供了对XPath计算环境和表达式的访问 */
private XPath xpath;

2 构造器

XPathParser实例化的构造器为:

3 方法

根据构造器可以看出,经过2个方法,最后生成了Document。

3.1 commonConstructor

方法中只是把属性放入相应的值。

3.2 createDocument方法

private Document createDocument(InputSource inputSource) {
    // important: this must only be called AFTER common constructor
    try {
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      factory.setValidating(validation);
      factory.setNamespaceAware(false);
      factory.setIgnoringComments(true);
      factory.setIgnoringElementContentWhitespace(false);
      factory.setCoalescing(false);
      factory.setExpandEntityReferences(true);
      DocumentBuilder builder = factory.newDocumentBuilder();
      builder.setEntityResolver(entityResolver);
      builder.setErrorHandler(new ErrorHandler() {
        public void error(SAXParseException exception) throws SAXException {
          throw exception;
        }
        public void fatalError(SAXParseException exception) throws SAXException {
          throw exception;
        }
        public void warning(SAXParseException exception) throws SAXException {
        }
      });
      return builder.parse(inputSource);
    } catch (Exception e) {
      throw new BuilderException("Error creating document instance.  Cause: " + e, e);
    }
}

这里就是JDK底层提供的创建一个Document,这里需要自己去查看JDK API,不在过多的分析。

4 MyBatis配置解析(XMLMapperEntityResolver

上面只是看到代码解析成Document文档,但是MyBatis是如何找到自己的文档的呢?下面就来分析。

MyBatis整合Spring的实现(2)2.1已经提到默认DTD文件解析类(XMLMapperEntityResolver)“。那么就看这里代码如何。

图中红框中发现了,MyBatis配置的全局配置文件定义。

4.1 XMLMapperEntityResolver的接口EntityResolver

EntityResolver用于解析实体的基本接口。只提供了一个方法resolveEntity,且子类必须实现。

4.2 resolveEntity方法

代码先根据publicId获取InputSource,如果没有,在根据systemId获取InputSource。

总结:

经过3章的分析,了解Mybatis如果对全局配置文件进行读取并生成Document。以上的类中已经很多可以公用的,比如XPathParser类,没有具体的逻辑代码,只是一个XML到Document的转换,所以后面分析的Mybatis对SQL配置的解析也使用了此类。本文4中XMLMapperEntityResolver类也已经把SQL的Mapper文件考虑进去。

© 著作权归作者所有

tara_qri
粉丝 10
博文 48
码字总数 21496
作品 1
海淀
私信 提问
Spring与MyBatis整合

序言 在MyBatis学习中,我们会发现很多重复性的代码,例如: //创建连接 private SqlSessionFactory sqlSessionFactory = SessionFactoryUtils .getSessionfactory().getSqlSessionFactory(......

开源俱乐部
2014/07/09
446
0
SpringMVC,mybatis,spring整合

需求:使用SpringMVC和mybatis完成商品列表查询 一 整合思路 1 相关jar包(maven) 2 整合dao层 mybatis和springmvc整合,通过spring管理mapper接口 使用mapper的扫描器自动扫描mapper接口在...

Bbigbug
2018/04/25
0
0
spring中的mybatis(1)

开门见山 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mapperLocations" value="cl......

hyssop
2015/10/29
113
0
Spring Boot 整合 MyBatis

最近项目原因可能会继续开始使用MyBatis,已经习惯于spring-data的风格,再回头看xml的映射配置总觉得不是特别舒服,接口定义与映射离散在不同文件中,使得阅读起来并不是特别方便。 Spring...

中关村的老男孩
06/24
67
0
JavaEE Spring+Mybatis整合

1. MyBatis整合Spring所需的jar包如下: Spring的jar包 Mybatis的jar包 Mybatis-Spring整合包,即mybatis-spring-1.3.2.jar MySql的数据库驱动jar包 数据库连接池的jar包 2.整合思路 MyBati...

凌浩雨
2018/04/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
22分钟前
7
0
java数据类型

基本类型: 整型:Byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用类型: 类类型: 接口类型: 数组类型: Byte 1字节 八位 -128 -------- 127 short 2字节...

audience_1
今天
7
0
太全了|万字详解Docker架构原理、功能及使用

一、简介 1、了解Docker的前生LXC LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpa...

Java技术剑
今天
13
0
Wifiphisher —— 非常非常非常流氓的 WIFI 网络钓鱼框架

编者注:这是一个非常流氓的 WIFI 网络钓鱼工具,甚至可能是非法的工具(取决于你的使用场景)。在没有事先获得许可的情况下使用 Wifiphisher 攻击基础网络设施将被视为非法活动。使用时请遵...

红薯
今天
62
1
MongoDB 4 on CentOS 7安装指南

本教程为CentOS x86_64 7.x操作系统下,MongoDB Community x86_64 4.2(GA)安装指南。 安装方式一:yum repo在线安装 [此方式较为简单,官方推荐] Step1:新建MongDB社区版Yum镜像源。 # vim ...

王焱君
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部