Mybatis源码(session创建过程)
前言:如果你同我一样对这种源码代码很讨厌,但是却又想搞懂内部是怎么运作的那么你大可往下看。
-
回顾:xml在mybatis里面的作用?
答:放在resources文件夹下面的mybatis-config.xml,MyBatis中的Configuration组件用于描述主配置文件信息,框架在启动时会解析XML配置,将配置信息转换为Configuration对象。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!--配置有顺序按照引入文件properties,settings,typeAliases,environment顺序排列--> <configuration> <!--引入外部配置文件--> <properties resource="org/mybatis/example/config.properties"></properties> <!--设置--> <settings> <!--开启缓存--> <setting name="cacheEnabled" value="true"/> <!--开启懒加载--> <setting name="lazyLoadingEnabled" value="true"/> <!--自动生成主键--> <setting name="useGeneratedKeys" value="false"/> </settings> <!--起别名--> <typeAliases> <!--为类起别名--> <typeAlias alias="Author" type="domain.blog.Author"/> <typeAlias alias="Blog" type="domain.blog.Blog"/> <typeAlias alias="Comment" type="domain.blog.Comment"/> <typeAlias alias="Post" type="domain.blog.Post"/> <typeAlias alias="Section" type="domain.blog.Section"/> <typeAlias alias="Tag" type="domain.blog.Tag"/> <!-- 通过包扫描给所有的实体类起别名,给指定报名下的所有类起别名,默认每个实体类的别名是首字母小写的类名Dept dept --> <package name="com.zheng.pojo"/> </typeAliases> <!--环境--> <environments default="development"> <environment id="development"> <!--事务管理器 在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"): --> <transactionManager type="JDBC"/> <!--数据源 POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时 间。这种处理方式很流行,能使并发 Web 应用快速响应请求。 --> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!--mapper注册--> <mappers> <mapper resource="org/mybatis/example/BlogMapper.xml"/> </mappers> </configuration>还有mapper.xml文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mappers namespace="dao.VoteUserDao"> </mappers>说实话我已经能够信手拈来了这些xml文件(不敢说全默写,但是基本懂得各个标签的用法)
但是无知的少年啊!你知道这些帮助我们节省时间的xml文件是怎样被读取的吗?
-
mybatis读取xml过程:
- JDK API中提供了3种方式解析XML,分别为DOM、SAX和XPath。
- 在这3种方式中,API最易于使用的就是XPath方式,MyBatis框架中也采用XPath方式解析XML文件中的配置信息。
如何通过XPath方式解析XML文件?
答:官方的xpathAPI可以学习虽然这里我很想用自己的方式表达出来但是我还没搞懂(我会回来更新的)
Mybatis的读取xml方式是对Xpath读取方式的简化也就是做了一种封装
答:XPath太繁琐了(虽然我看不懂但是我知道XPath读取节点方式很很拉跨!)为了简化XPath解析操作,MyBatis通过XPathParser工具类封装了对XML的解析操作,同时使用XNode类增强了对XML节点的操作。使用XNode对象,我们可以很方便地获取节点的属性、子节点等信息。很大程度上简化了XML解析过程。所有这里建议学习XPathParser工具类更好。
都知道Mybaris-config.xml解析完之后会产生一个Configuration对象干嘛用?
答:MyBatis框架启动后,首先创建Configuration对象,然后解析所有配置信息,将解析后的配置信息存放在Configuration对象中。Configuration是MyBatis中比较重要的组件,主要有以下3个作用:
(1)用于描述MyBatis配置信息,例如标签配置的参数信息。
(2)作为容器注册MyBatis其他组件,例如TypeHandler、MappedStatement等。
(3)提供工厂方法,创建ResultSetHandler、StatementHandler、Executor、ParameterHandler等组件实例。什么是SqlSession实例创建过程?
答:MyBatis中的SqlSession实例使用工厂模式创建,所以在创建SqlSession实例之前需要先创建SqlSessionFactory工厂对象,为了创建SqlSessionFactory对象,首先创建了一个SqlSessionFactoryBuilder对象,然后以MyBatis主配置文件输入流作为参数,调用SqlSessionFactoryBuilder对象的build()方法,然后调用SqlSessionFactory对象的openSession()方法。
疑惑不解:这不是谁都知道?
session创建过程图

浙公网安备 33010602011771号