avatar

目录
Mybatis 源码学习

Mybatis 源码学习

1.初始化(MyBatis初始化的过程,就是创建 Configuration对象的过程。

MyBatis的上述配置信息会配置在XML配置文件中,使用org.apache.ibatis.session.Configuration 对象作为一个所有配置信息的容器加载 xml信息

二、MyBatis基于XML配置文件创建Configuration对象的过程

加载config.xml 配置文件 为inputStream, 创建SqlSessionFactory,创建SqlSession,使用sql

MyBatis初始化的基本过程
  1. MyBatis内部通过Configuration对象来创建SqlSessionFactory,
Code
1
2
3
4
5
6
//2. 创建XMLConfigBuilder对象用来解析XML配置文件,生成Configuration对象  
XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
//3. 将XML配置文件内的信息解析成Java对象Configuration对象
Configuration config = parser.parse();
//4. 根据Configuration对象创建出SqlSessionFactory对象
return build(config);

2.XMLConfigBuilder解析xml文件 将信息放到Configuration 对象中

XMLConfigBuilder会将 mybatis的 XML配置文件的信息转换为Document对象,变成节点,然后取节点对应的Node对象,解析 “/configuration”节点下的子节点信息,然后将解析的结果设置到Configuration对象中

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//1.首先处理properties 节点     
propertiesElement(root.evalNode("properties")); //issue #117 read properties first
//2.处理typeAliases
typeAliasesElement(root.evalNode("typeAliases"));
//3.处理插件
pluginElement(root.evalNode("plugins"));
//4.处理objectFactory
objectFactoryElement(root.evalNode("objectFactory"));
//5.objectWrapperFactory
objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
//6.settings
settingsElement(root.evalNode("settings"));
//7.处理environments
environmentsElement(root.evalNode("environments")); // read it after objectFactory and objectWrapperFactory issue #631
//8.database
databaseIdProviderElement(root.evalNode("databaseIdProvider"));
//9. typeHandlers
typeHandlerElement(root.evalNode("typeHandlers"));
//10 mappers
mapperElement(root.evalNode("mappers"));

如果设置了数据源 则把数据源放入Environment中,然后设置到Configuration中

3.根据configuration对象创建 SqlSessionFactory

这里我们可以手动使用解析xml 使用mybatis

Code
1
2
3
4
5
6
7
8
9
10
String resource = "mybatis-config.xml";  
InputStream inputStream = Resources.getResourceAsStream(resource);
//手动创建XMLConfigBuilder,并解析创建Configuration对象
XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, null,null);
Configuration configuration=parse();
//使用Configuration对象创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
//使用MyBatis
SqlSession sqlSession = sqlSessionFactory.openSession();
List list = sqlSession.selectList("com.foo.bean.BlogMapper.queryAllBlogInfo");

二,MyBatis 解析sql

静态sql:程序启动的时候解析

动态sql:用户进行查询等sql相关操作的时候解析

http://blog.csdn.net/u012387062/article/details/55005414

三,MyBatis 解析sql

http://blog.csdn.net/luanlouis/article/details/37744073

文章作者: 美式不加糖
文章链接: http://yoursite.com/2020/02/04/Mybatis%20%E6%BA%90%E7%A0%81%E5%AD%A6%E4%B9%A0/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 湖畔小屋
打赏
  • 微信
    微信
  • 支付寶
    支付寶