- 首先我们了解一下mybatis中的几个核心概念
- Configuration 配置,可以理解为mybatis的大管家,管理一切
- Environment 环境,这个主要负责数据源,事务管理器
- MappedStatement mapper.xml对应的声明类,定义mapper中所有的标签,属性
- Interceptor 拦截器,可以拦截Executor,ParameterHandler,ResultSetHandler,StatementHandler
- SqlSessionFactory SQL会话管理工厂类
- SqlSession SQL会话,定义了增,删,改,查,提交,回滚,获取java.sql.Connection,获取mapper
- MapperProxy mapper代理类,生成接口代理对象
- Executor 执行器,主要负责增,删,改,查,提交,回滚的执行
- ParameterHandler 参数处理器,主要负责参数设置
- ResultSetHandler 查询结果集处理器,用来封装ResultSet对应的结果
- StatementHandler Statement处理器,用来执行Statement相应的操作
带着上面的概念,我们开始我们的源码分析入门之旅
- 首先我们要看看官方demo 打开mybatis-3-getting-started
例子:
代码结构:1
2
3
4
5
6
7
8
9
10
11src
main
test
java
io.jsbxyyx
mapper
Blog.java
BlogMapper.java
BlogMapper.xml
Demo.java
mybatis-config.xml
1 | public static void main(String[] args) throws IOException { |
XML创建SqlSessionFactory
1 | org.apache.ibatis.session.SqlSessionFactoryBuilder#build(java.io.InputStream, java.lang.String, java.util.Properties) |
核心方法org.apache.ibatis.builder.xml.XMLConfigBuilder#parseConfiguration
该方法会解析出properties,settings,typeAliases,plugins,objectFactory,objectWrapperFactory,reflectorFactory,environments,databaseIdProvider,typeHandlers,mappers
解析mappers
1 | // 这里解析mappers下的package标签,也就是包扫描,以及mapper标签 |
解析mappers,创建MappedStatement并缓存到内存
打开session
1 | org.apache.ibatis.session.defaults.DefaultSqlSessionFactory#openSession() |
流程
获取数据源 =》开启事务 =》获取执行器 =》创建SqlSession
获取Mapper
1 | org.apache.ibatis.session.Configuration#getMapper(java.lang.Class<T>, org.apache.ibatis.session.SqlSession) |
流程
根据接口class =》创建JDK动态代理对象org.apache.ibatis.binding.MapperProxy(这就是为啥mybatis的mapper定义是接口的原因)
执行方法
1 | io.jsbxyyx.mapper.BlogMapper#selectBlog |
流程
动态代理MapperProxy =》创建MappedStatement缓存key =》获取Executor =》分别加载parameter,resultSet,statement插件 =》 获取java.sql.Connection =》获取java.sql.Statement =》执行sql =》处理结果集
流程结束。
期待下次更新咯。:-D
如果您觉得文章有用或对您有帮助,欢迎通过以下方式赞助我。 ♪(^∀^●)ノ
本文由 xxzkid | 我叫王也道长创作,采用
CC BY 3.0 CN协议 进行许可。
可自由转载、引用,但需署名作者且注明文章出处。
本文标题:mybatis3.5.x源码系列(1)
本文链接:https://xxzkid.github.io/2020/mybatis-source-01/
本文标题:mybatis3.5.x源码系列(1)
本文链接:https://xxzkid.github.io/2020/mybatis-source-01/