MyBatis源码解析(一) Configuration 初始化

1 完成前置条件
Configuration初始化首先需要了解DataSource、TransactionFactory、Environment;
1.1 javax.sql.DataSource
数据源配置,通常使用第三方数据池作为数据源,如Druid等。数据池推荐帖【JAVA数据源】
1.2 org.apache.ibatis.transaction.TransactionFactory
MYbatis提供了org.apache.ibatis.transaction实现事务管理在transaction包下提供了2个接口TransactionFactory,Transaction

TransactionFactory 通过工厂设计模式返回Transaction实例,
Transaction 对Connection 进行了封装,提供了获取连接,提交,回滚,关闭等方法

Mybatis 提供了两种实现方式

org.apache.ibatis.transaction.jdbc    基于JDBC实现事务管理
org.apache.ibatis.transaction.managed    扩展,通过整合第三方框架实现事务管理

推荐帖【Transaction事务模块】
1.3 org.apache.ibatis.mapping.Environment
Environment类比较简单,只记录了id,并依赖于TransactionFactory和Datasource。
1.4 org.apache.ibatis.session.Configuration
可以这么说,MyBatis初始化的过程,就是创建 Configuration对象的过程MyBatis通常通过两种方式初始化Configuration

XML配置
API构建

1.4.1 XML配置
MyBatis主要通过下例三个类实现XML解析

org.apache.ibatis.builder.xml.XMLMapperEntityResolver    获取本地dtd,避免从网络获取
org.apache.ibatis.parsing.XPathParser    解析XML->Document, 获取XNode实例
org.apache.ibatis.parsing.XNode    获取子孙节点及节点属性

XPathParser 负责Document实例化,以及获取子节点

初始化Document —-> XPathParser.createDocument(inputSource)javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(inputSource)
获取子节点XNode —-> XPathParser.evalNode(expression)javax.xml.xpath.XPathFactory.newInstance().newXPath().evaluate(expression, root, returnType)并将子节点封装成XNode实例,且XNode获取子节点还是通过XPathParser实现的。

最后MyBatis通过org.apache.ibatis.builder.xml.XMLConfigBuilder完成Configuration初始化 —-> XMLConfigBuilder.parse()
1.4.2 API构建

构建DataSource
构建Environment
构建Configuration

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理