此系列为鲁班大叔的MyBatis源码的学习总结。
我调试的MyBatis版本为3.5.7
一、JDBC执行过程
先回顾一下JDBC执行过程:
/** 第一步: 获取连接 */
Connection connection = DriverManager.getConnection(JDBC.URL, JDBC.USERNAME, JDBC.PASSWORD);
/** 第二步: 预编译SQL */
PreparedStatement statement = connection.prepareStatement("select * from users ");
/** 第三步: 执行查询 */
ResultSet resultSet = statement.executeQuery();
/** 第四步: 读取结果 */
readResultSet(resultSet);
分为获取连接、预编译SQL,执行查询和读取结果4步。
二、mybatis执行过程
- 加载并解析配置文件到Configuration中
- 创建DefaultSqlSessionFactory,创建SqlSession
- 通过代理模式创建MapperProxy
- 如果开启了二级缓存,那么执行CachingExecutor
- 否则执行BaseExecutor
三、MyBatis核心组件
-
执行器(Executor)
执行器的核心功能包括:缓存维护、事务操作,query和update操作,具体的SQL语句操作交给StatementHandler来处理。
-
会话(SqlSession)
为用户提供增删改查、事务的提交以及会话关闭等功能。它里面包含一个执行器,所有的操作都交给执行器处理。
-
SQL处理器(StatementHandler)
它会执行上面说的JDBC的操作像statement的创建,预编译、参数的设置、SQL的执行以及结果的处理等。- 设置参数:ParameterHandler
- 结果处理:ResultSetHandler
-
Mapper代理(MapperProxy)
InvocationHandler实现类,MapperProxyFactory通过JDK动态代理生成Mapper的实现类。
网友评论