目录
一、容器Configuration
二、动态SQL模板
- MappedStatement(映射器)
- 解析过程
三、SqlSession
- 基本介绍
- 分类
- Executor
四、Mapper(殊途同归)
- 存在的意义
- 工作原理
五、缓存
- 一级缓存
- 二级缓存
2.1基本信息
2.2如何工作
六、插件
七、结果映射
八、总结
看过Mybatis后,我觉得Mybatis虽然小,但是五脏俱全,而且设计精湛。
这个黑盒背后是怎样一个设计,下面讲讲我的理解
正文
一、容器Configuration
Configuration 像是Mybatis的总管,Mybatis的所有配置信息都存放在这里,此外,它还提供了设置这些配置信息的方法。Configuration可以从配置文件里获取属性值,也可以通过程序直接设置。
用一句话概述Configuration,它类似Spring中的容器概念,而且是中央容器级别,存储的Mybatis运行所需要的大部分东西。
二、动态SQL模板
使用mybatis,我们大部分时间都在干嘛?在XML写SQL模板,或者在接口里写SQL模板
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- mapper:根标签,namespace:命名空间,命名空间唯一 -->
<mapper namespace="UserMapper">
<select id="selectUser" resultType="com.wqd.model.User">
select * from user where id= #{id}
</select>
</mapper>
或者
@Mapper
public interface UserMapper {
@Insert("insert into user( name, age) " +
"values(#{user.name}, #{user.age})")
void save(@Param("user") User user);
@Select("select * from user where id=#{id}")
User getById(@Param("id")String id);
}
这对于Mybatis框架内部意味着什么?
1、MappedStatement(映射器)
- 就像使用Spring,我们写的Controller类对于Spring 框架来说是在定义BeanDefinition一样。
- 当我们在XML配置,在接口里配置SQL模板,都是在定义Mybatis的域值MappedStatement
一个SQL模板对应MappedStatement
mybatis 在启动时,就是把你定义的SQL模板,解析为统一的MappedStatement对象,放入到容器Configuration中。每个MappedStatement对象有一个ID属性。这个id同我们平时mysql库里的id差不多意思,都是唯一定位一条SQL模板,这个id 的命名规则:命名空间+方法名
Spring的BeanDefinition,Mybatis的MappedStatement
2、解析过程
同Spring一样,我们可以在xml定义Bean,也可以java类里配置。涉及到两种加载方式。
这里简单提一下两种方法解析的入口:
1.xml方式的解析:
提供了XMLConfigBuilder组件,解析XML文件,这个过程既是Configuration容器创建的过程,也是MappedStatement解析过程。
XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
Configuration config = parser.parse()
复制代码
2.与Spring使用时:会注