mybatis重要组件
-
Configuration 类是用于管理MyBatis全局配置文件的关系类
- Environment->DataSource
- Map<String, MappedStatement> mappedStatements
-
SqlSessionFactory
- SqlSessionFactory是Session的管理工厂接口,用于开启SqlSession
-
SqlSession SqlSession中包含了许多面向开发者的调用方法,如selectOne()、selectList()、delete()、update()等方法。
- SqlSessionTemplate
- DefaultSqlSession
-
MappedStatement MappedStatement是Mapper.xml配置文件的封装对象,其中包含SQL语句(SqlSource)、输入参数(ParameterMap)
-
StatementHandler StatementHandler接口具体操作数据库相关的Handler,提供query()、getBoundSql()等方法。
-
ResultHandler ResultHandler接口用于操作数据库返回结果。
Executor
- CachingExecutor
- BaseExecutor
-
SimpleExecutor
- 简单执行器,是MyBatis中默认使用的执行器,每执行一次update或select,就开启一个Statement对象,用完就直接关闭Statement对象(可以是Statement或者是PreparedStatment对象)
-
BatchExecutor
- 批处理执行器,用于将多个SQL一次性输出到数据库
-
ReuseExcutor
- 可重用执行器,这里的重用指的是重复使用Statement,它会在内部使用一个Map把创建的Statement都缓存起来,每次执行SQL命令的时候,都会去判断是否存在基于该SQL的Statement对象,如果存在Statement对象并且对应的connection还没有关闭的情况下就继续使用之前的Statement对象,并将其缓存起来。因为每一个SqlSession都有一个新的Executor对象,所以我们缓存在ReuseExecutor上的Statement作用域是同一个SqlSession。
org.mybatis.spring.SqlSessionTemplate#selectList
org.apache.ibatis.session.defaults.DefaultSqlSessionFactory#openSessionFromDataSource
//创建Executor和DefaultSqlSession
org.apache.ibatis.session.Configuration#newExecutor
-
StatementHandler
- RoutingStatementHandler
- BaseStatementHandler
- 它本身是一个抽象类,用于简化StatementHandler 接口实现的难度,属于适配器设计模式体现,它主要有三个实现类:
- SimpleStatementHandler
- java.sql.Statement对象创建处理器,管理 Statement 对象并向数据库中推送不需要预编译的SQL语句。
- PreparedStatementHandler
- java.sql.PrepareStatement对象的创建处理器,管理Statement对象并向数据中推送需要预编译的SQL语句。
- CallableStatementHandler
- java.sql.CallableStatement对象的创建处理器,管理 Statement 对象并调用数据库中的存储过程。
在创建 SimpleStatementHandler PreparedStatementHandler CallableStatementHandler调用父类构造方法 BaseStatementHandler 创建了 ParameterHandler ResultSetHandler
protected BaseStatementHandler(Executor executor, MappedStatement mappedStatement, Object parameterObject, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql){
// ....
//构建parameterHandler
this.parameterHandler = configuration.newParameterHandler(mappedStatement, parameterObject, boundSql);
//构建resultSetHandler
this.resultSetHandler = configuration.newResultSetHandler(executor, mappedStatement, rowBounds, parameterHandler, resultHandler, boundSql);
}
网友评论