0


Mybatis 核心知识点整理成图 推荐收藏备用

文章目录

Mybatis开发流程

传统开发简要流程

  1. 导入mybatis依赖
  2. 配置mybatis-config.xml
  3. 配置mapper.xml
  4. 定义接口及其实现类

接口代理开发简要流程

  1. 导入mybatis依赖
  2. 配置mybatis-config.xml
  3. 配置mapper.xml
  4. 定义接口

接口开发六点注意事项

  1. 映射文件目录与接口所在目录一致 (不一致需要 指定地址 mapper-locations:classpath: )
  2. 映射文件名与接口名一致
  3. namespace设置为接口的全限定类名
  4. id 为接口方法名一致
  5. parameterType应与接口形参类型一致 (一般不写 ,写就要写对)
  6. resultType与接口方法返回值类型一致

image-20220308220448829

sqlMapperConfig 核心配置文件

mybatis相关API

输入输出映射

如果数据库表字段名称和实体类属性名称不一致,那么可以使用三种方式解决:设置别名、设置 驼峰规则、resultMap。

常用动态Sql标签

动态sql执⾏原理

1. SqlResource 
该接⼝含义是作为sql对象的来源,通过该接⼝可以获取sql对象。其唯⼀的实现类是
XmlSqlResource,表示通过xml⽂件⽣成sql对象。

2. Sql 
该接⼝可以⽣成sql语句和获取sql相关的上下⽂环境(如ParameterMap、ResultMap等),有三个
实现类: RawSql表示为原⽣的sql语句,在初始化即可确定sql语句;SimpleDynamicSql表示简单
的动态sql,即sql语句中参数通过$property$⽅式指定,参数在sql⽣成过程中会被替换,不作为
sql执⾏参数;DynamicSql表示动态sql,即sql描述⽂件中包含isNotNull、isGreaterThan等条件
标签。

3. SqlChild 
该接⼝表示sql抽象语法树的⼀个节点,包含sql语句的⽚段信息。该接⼝有两个实现类: SqlTag表
示动态sql⽚段,即配置⽂件中的⼀个动态标签,内含动态sql属性值(如prepend、property值 等);SqlText表示静态sql⽚段,即为原⽣的sql语句。每条动态sql通过SqlTag和SqlText构成相应的
抽象语法树。

4. SqlTagHandler 
该接⼝表示SqlTag(即不同的动态标签)对应的处理⽅式

5. SqlTagContext 
⽤于解释sql抽象语法树时使⽤的上下⽂环境。通过解释语法树每个节点,将⽣成的sql存⼊
SqlTagContext。最终通过SqlTagContext获取完整的sql语句。

image-20220308223550017

分步查询

什么是分步查询 : 概念:将一次多表查询拆分多次单表查询 为延迟加载做铺垫

延迟加载

MyBatis中的延迟加载,也称为懒加载,是指在进行表的关联查询时,按照设置延迟规则推迟对关联对象的select查询。

例如在进行一对多查询的时候,只查询出一方,当程序中需要多方的数据时,mybatis再发出sql语句进行查询,这样子延迟加载就可以的减少数据库压力。

MyBatis 的延迟加载只是对关联对象的查询有迟延设置,对于主加载对象都是直接执行查询语句的。

注意:延迟加载的应用要求:关联对象的查询与主加载对象的查询必须是分别进行的select语句,不能

是使用多表连接所进行的select查询

延迟加载失效的情况

对象调用 toString  hashcode   equals 等方法都会使的延迟加载失效  

延迟加载原理

使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,比如调用A.getB().getName(),拦截器invoke()方法发现A.getB()是null值,那么就会单独发送事先保存好的查询关联B对象的sql,把B查询上来,然后调用A.setB(b),于是a的对象b属性就有值了,接着完成A.getB().getName()方法的调用。

缓存机制

好处:减少了数据库的查询次数,提高了执行效率

坏处:影响了数据的时效性,会产生脏数据

二级缓存默认是关闭的,当设置了cacheEnabled=true后,在mapper.xml中设置cache标签就会去创建一个cacah对象,所以同一个mapper的mapperStatement公用同一个cache对象

一级缓存工作机制

image-20220308222842678

一级缓存 是 SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构用于存储缓存数据。

不同的sqlSession之间的缓存数据区域是互相不影响的。也就是他只能作用在同一个sqlSession中,不同的sqlSession中的缓存是互相不能读取的

二级缓存机制

image-20220308222950362

二级缓存是 mapper 级别的缓存,多个 SqlSession 去操作同一个Mapper的sql语句,多个 SqlSession可以共用二级缓存,二级缓存是跨 SqlSession 的。

UserMapper有一个二级缓存区域(按 namespace 划分),每个 mapper 也有自己的二级缓存区域(按namespace分)。每一个 namespace 的 mapper 都有一个二级缓存区域,如果相同两个 mapper 的 namespace ,这两个mapper执行sql查询到数据将存在相同的二级缓存区域中。

注解开发常用注解

标签: java 开发语言

本文转载自: https://blog.csdn.net/JAVAlife2021/article/details/123365549
版权归原作者 秋日的晚霞 所有, 如有侵权,请联系我们删除。

“Mybatis 核心知识点整理成图 推荐收藏备用”的评论:

还没有评论