Mybatis的核心对象
一、Mybatis的核心对象及其作用
1.数据存储类对象
概念:在Java中(JVM)对Mybatis相关配置信息进行封装
目的:为了减少IO避免JVM与操作系统打交道,节省时间和资源,实现IO的复用等。
Mybatis-config.xml ----> Configuration
XXMapper.xml ----> MappedStatement (形象的认知,不准确)
Configuration类
- 封装Mybatis-config.xml文件相关的内容
(1)setting 标签对应的内容
(2)environment标签里面的内容protected boolean safeRowBoundsEnabled; protected boolean safeResultHandlerEnabled = true; protected boolean mapUnderscoreToCamelCase; protected boolean aggressiveLazyLoading; protected boolean multipleResultSetsEnabled = true; protected boolean useGeneratedKeys; protected boolean useColumnLabel = true; protected boolean cacheEnabled = true; protected boolean callSettersOnNulls; protected boolean useActualParamName = true; protected boolean returnInstanceForEmptyRow; protected boolean shrinkWhitespacesInSql;
(3)typeAlias标签里面的内容protected Environment environment;
(4)mappers标签里面的内容protected final TypeAliasRegistry typeAliasRegistry = new TypeAliasRegistry();
protected final Set<String> loadedResources = new HashSet<>();
- 封装了每个mapper.xml文件(对mapper文件里面的内容进行了汇总,便于之后使用)
protected final Map<String, MappedStatement> mappedStatements = new StrictMap<MappedStatement>("Mapped Statements collection")
.conflictMessageProducer((savedValue, targetValue) ->
". please check " + savedValue.getResource() + " and " + targetValue.getResource());
- 负责创建其他核心对象
MappedStatement类
MappedStatement并不是将每个mapper.xml文件封装为一个个对象,而是将每个文件内的每个CRUD标签单独封装成一个MappedStatement对象。标签里的属性就是MappedStatement类里面的属性。
有一点需要注意
// 这里的StatementType可以是以下三种Statement中的一种
private StatementType statementType;
//默认是PreparedStatement
mappedStatement.statementType = StatementType.PREPARED;
而且MappedStatement还对编写的sql语句进行了封装,封装到了BoundSql这个类里面了
进入这个类可以看到
还有一个小细节
两者是双向关联的关系,所以能通过MappedStatement也能找到Configuration。
- 操作类对象
Mybatis里面其实封装了很多操作类对象,表面看上去是SQLSession来帮我们完成了一系列的操作,其实是SqlSession调用了其他的一些操作类对象。如下图
接下来就来逐个分析其中的操作类对象 - Executor
Executor是Mybatis处理功能的核心
主要功能
a、增删改
b、查
c、事务操作(提交、回滚)
d、缓存相关的操作
Executor是一个接口,主要的实现类有一下三个
BatchExecutor
用于jdbc中的批处理操作
ReuseExecutor
用于Statement的复用,但Statement中的sql重复的概率很低,所以很少使用
SimpleExecutor
这是Mybatis里面默认使用的实现类,也是最常用的实现类
在Configuration类里面有默认使用的配置
protected ExecutorType defaultExecutorType = ExecutorType.SIMPLE;
-
StatementHandler
StatementHandler是对Executor中对增删改查操作进一步的封装,目的是为了实现单一职责。它封装了JDBC中的Statement,是Mybatis对数据库访问操作的真正核心!StatementHandler也是一个接口,常用的实现类有三个
SimpleStatementHandler(常用)
CallableStatementHandler
PreparedStatementHandler -
ParameterHandler
-
ResultSetHandler
-
TypeHandler
未完待续