1.SqlSessionFactoryBuilder

SqlSessionFactoryBuilder 的作用是使用构建者模式创建 SqlSessionFactory 接口 对象。

2.SqlSessionFactory

SqlSessionFactory 可以被认为是一个数据库连接池,它的作用是创建 SqlSession 接口对象。

3.SqlSession

如果说 SqlSessionFactory 相当于数据库连接池,那么 SqlSession 就相当于一个数 据库连接(Connection 对象),你可以在一个事务里面执行多条 SQL,然后通过它的 commit、rollback 方法提交或者回滚事务。

4.Mapper

映射器。由一个 Java 接口和 XML 文件(或者注解构成),需要给出对应的 SQL 和映 射规则,负责发送 SQL 去执行并返回结果。

核心API的工作流程
MyBatis 核心API_sql

5.生命周期

SqlSessionFactoryBuilder: 该类用来创建 SqlSessionFactory 对象,当 SqlSessionFactory 对象被创建后, SqlSessionFactoryBuilder 就失去了作用,所以它只能存在于创建 SqlSessionFactory 的 方法中,而不要让其长期存在。因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法 作用域。

SqlSessionFactory: SqlSessionFactory 的生命周期存在于整个 MyBatis 的应用之中,所以一旦创建了 SqlSessionFactory,就要长期保存它,直至不再使用 MyBatis 应用,所以可以认为 SqlSessionFactory 的生命周期就等同于 MyBatis 的应用周期。由于 SqlSessionFactory 是 一 个 对 数 据 库 的 连 接 池 , 所 以 它 占 据 着 数 据 库 的 连 接 资 源 。 如 果 创 建 多 个SqlSessionFactory,那么就存在多个数据库连接池,这样不利于对数据库资源的控制,也 会导致数据库连接资源被消耗光,出现系统宕机等情况,所以尽量避免发生这样的情况。因 此 SqlSessionFactory 是一个单例,让它在应用中被共享。

SqlSession: SqlSession 应该存活在一个业务请求中,处理完整个请求后,应该关闭这条连接,让 它归还给 SqlSessionFactory,否则数据库资源就很快被耗费精光,系统就会瘫痪,所以 用 try…catch…finally… 语句来保证其正确关闭。 所以 SqlSession 的最佳的作用域是请求或方法作用域。

Mapper: 由于 SqlSession 的关闭,它的数据库连接资源也会消失,所以它的生命周期应该小 于等于 SqlSession 的生命周期。Mapper 代表的是一个请求中的业务处理,所以它应该 在一个请求中,一旦处理完了相关的业务,就应该废弃它。