MyBatis核心对象
对象 | 相关对象 | 作用 |
---|---|---|
Configuration | MapperRegistry、TypeAliasRegistry、TypeHandlerRegistry | 包含了MyBatis的所有的配置信息 |
SqlSession | SqlSessionFactory、DefaultSqlSession | 对操作数据库的增删改查的API进行了封装,提供给应用层使用 |
Executor | BaseExecutor、SimpleExecutor、BatchExecutor、ReuseExecutor | MyBatis 执行器,是MyBatis调度的核心,负责SQL语句的生成和查询换成的维护 |
StatementHandler | BaseStatementHandler、SimpleStatementHandler、PreparedStatementHandler、CallableStatementHandler | 封装了JDBC Statement操作,负责JDBC Statement的操作,如设置参数、将Statement结果集转换成List集合 |
ParameterHandler | DefaultParameterHandler | 把用户传递的参数转换成JDBC Statement所需要的参数 |
ResultSetHandler | DefaultResultSetHandler | 把JDBC返回的ResultSet结果集对象转换成List类型的集合 |
MapperProxy | MapperProxyFactory | 触发管理类,用于代理Mapper接口方法 |
MappedStatement | SQLSource 、BoundSql | MappedStatement 维护了一条 <select|update|delete|insert> 节点的封装,表示一条SQL包含了SQL信息、入参信息、出参信息 |
4个核心对象的生命周期
以下表格说明了MyBatis四个核心对象的生命周期。
对象 | 生命周期 | 说明 |
---|---|---|
SqlSessionFactoryBuilder | 方法局部(method) | 它是用来构建SqlSessionFactory的,因为SqlSessionFactory只需要一个,当构建了SqlSessionFactory之后,它的使命就完成了。 |
SqlSessionFactory | 应用级别(application) | 它是用来创建SqlSession的,每次应用访问数据库,都需要创建一个会话,因为一直有创建会话的需要,所以SqlSessionFactory要存在于整个应用的生命周期中。创建SqlSession只需要一个实例就够了,所以SqlSessionFactory是单例的。 |
SqlSession | 请求和操作(request / method) | SqlSession是线程不安全的,不能在线程间共享。我们总请求开始时创建一个SqlSession会话对象,在请求结束或方法执行完毕的时候,要及时进行关闭。 |
Mapper | 方法(method) | 它实际上是一个代理对象,是从SqlSession中获得的。UserMapper mapper = sqlSession.getMapper(UserMapper.class) 它通过发送SQL来操作数据库的数据。它应该在一个SqlSession的事务方法之内。 |