mybatis-SqlSession
时间:2021-07-01 10:21:17
帮助过:10人阅读
而本文解析的类,都在 session 包下,整体类图如下:
老艿艿:省略了一部分前面已经解析过的类。

- 核心是 SqlSession 。
- SqlSessionFactory ,负责创建 SqlSession 对象的工厂。
- SqlSessionFactoryBuilder ,是 SqlSessionFactory 的构建器。
下面,我们按照 SqlSessionFactoryBuilder => SqlSessionFactory => SqlSession 来详细解析。
2. SqlSessionFactoryBuilder
org.apache.ibatis.session.SqlSessionFactoryBuilder ,SqlSessionFactory 构造器。代码如下:
- 提供了各种 build 的重载方法,核心的套路都是解析出 Configuration 配置对象,从而创建出 DefaultSqlSessionFactory 对象。
3. SqlSessionFactory
org.apache.ibatis.session.SqlSessionFactory ,SqlSession 工厂接口。代码如下:
- 定义了
#openSession(...) 和 #getConfiguration() 两类方法。
3.1 DefaultSqlSessionFactory
org.apache.ibatis.session.defaults.DefaultSqlSessionFactory ,实现 SqlSessionFactory 接口,默认的 SqlSessionFactory 实现类。
3.1.1 构造方法
3.1.2 openSession
-
调用 #openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) 方法,获得 SqlSession 对象。代码如下:
- DefaultSqlSession 的创建,需要
configuration、executor、autoCommit 三个参数。
-
#openSessionFromConnection(ExecutorType execType, Connection connection) 方法,获得 SqlSession 对象。代码如下:
3.1.3 getTransactionFactoryFromEnvironment
3.1.4 closeTransaction
4. SqlSession
org.apache.ibatis.session.SqlSession ,SQL Session 接口。代码如下:
4.1 DefaultSqlSession
org.apache.ibatis.session.defaults.DefaultSqlSession ,实现 SqlSession 接口,默认的 SqlSession 实现类。
4.1.1 构造方法
4.1.2 selectList
4.1.3 selectOne
- 内部调用
#selectList(String statement, Object parameter) 方法,进行实现。
4.1.4 selectMap
#selectMap(...) 方法,查询结果,并基于 Map 聚合结果。代码如下:
4.1.5 selectCursor
4.1.6 select
#select(..., ResultHandler handler) 方法,执行查询,使用传入的 handler 方法参数,对结果进行处理。代码如下:
4.1.7 wrapCollection
在上述的查询方法中,我们都可以看到一个 #wrapCollection(final Object object) 方法,若参数 object 是 Collection、Array、Map 参数类型的情况下,包装成 Map 返回。代码如下:
4.1.8 update