阅读 MyBatis 源码是理解其设计思想和提升 Java 开发能力的好方式。下面从准备 → 阅读路径 → 核心模块 → 调试技巧几个方面,系统讲一下「Java MyBatis 怎么读源码」。
推荐从 GitHub 拉取官方源码:
git clone https://github.com/mybatis/mybatis-3.git
建议:
mybatis-3.5.x)MyBatis 核心模块(mybatis-3):
org.apache.ibatis
├── session // SqlSession 相关
├── binding // Mapper 接口绑定
├── builder // 配置解析
├── mapping // SQL 映射
├── executor // 执行器
├── plugin // 插件(拦截器)
├── type // 类型处理器
├── transaction // 事务
└── datasource // 数据源
不要一上来就读底层
SqlSession session = sqlSessionFactory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectById(1);
SqlSessionFactory 是怎么创建的?getMapper() 返回的是什么?核心类:
SqlSessionFactoryBuilderXMLConfigBuilderConfiguration阅读路径:
SqlSessionFactoryBuilder.build()
→ XMLConfigBuilder.parse()
→ Configuration 初始化
重点理解:
Configuration 是 MyBatis 的“全局配置中心”核心类:
SqlSessionDefaultSqlSessionExecutor
SimpleExecutorReuseExecutorBatchExecutor阅读路径:
SqlSession.selectOne()
→ Executor.query()
→ StatementHandler
→ ParameterHandler
→ ResultSetHandler
理解重点:
核心类:
MapperProxyMapperMethodSqlCommand阅读路径:
session.getMapper()
→ MapperProxy(JDK 动态代理)
→ MapperMethod.execute()
重点:
核心类:
StatementHandlerPreparedStatementHandlerParameterHandlerResultSetHandler理解:
在 src/test 下写 Demo:
@Test
public void testSelect() {
// 单步调试
}
<setting name="logImpl" value="STDOUT_LOGGING"/>
SqlSessionFactoryBuilder.buildDefaultSqlSession.selectListExecutor.queryMapperProxy.invokeMyBatis 源码 = 配置解析 + 动态代理 + 执行器 + JDBC 封装
如果你愿意,我也可以:
你想从哪一部分开始?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。