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
发表回复