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