MyBatis 学习心得笔记

MyBatis 高级映射

局部懒加载: 在association 标签中添加fecthType = “lazy”

多对一: private Student student;

全局懒加载: lazyLoadingEnabled = true

延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。

特定关联关系中可通过设置 fetchType

属性来覆盖该项的开关状态

一对多:

private List student ;

第一种方式:collection
在这里插入图片描述

第二种分步查询:可复用性增强,支持延迟加载
在这里插入图片描述

Mybatis 缓存

cache

作用:缓存通过减少sql 查询的操作,来提高程序的执行效率,mybatis 语句的查询结果放到缓存中,当下一次还是还是这一条sql 语句时,直接从缓存中取,不再查询数据库,效率得到大幅度的提升。

mybatis 缓存:

一级缓存: 将查新到的数据存储到sqlSession中 ,一级缓存默认开启,不需要做任何的配置,只要使用同一个sqlSession 对象执行同一条SQL 语句,就会走缓存。

什么时候不走缓存?

1,SqlSession 对象不是同一个,

2,查询条件不一样也不走缓存

什么时候一级缓存失效?

第一次查询语句和第二次查询语句之间,做一下任意的一件事都会让缓存清空

1,执行 了sqlSession 的clearChace 方法,这是手动清除缓存

2,执行了Insert, 或delete 或, update 任意一个语句

二级缓存:

将查询到的数据存储到sqlSessionFactory 中

1,<setting name = "cacheEnabled " value = " true " 全局性的开启或者关闭所有的映射配置文件中已经配置的任何缓存,默认就是true .

2,在需要使用二级缓存的SqlMapper.xml 文件中添加配置: <cache /》

3,使用二级缓存的实体类对象必须是可序列化的,也就是必须实现serializable 接口

4,sqlsession 对象关闭或者提交之后,一级缓存中的数据才会被写入二级缓存中去,此时二级缓存才可用。

=====> 默认情况下:二级缓存机制是开启的,只需要在对应的sqlMapper 文件中 使用<cache/》 标签,来表明我使用二级缓存。

动态sql

当if 传递的三个值均为空的情况下

在这里插入图片描述

where 标签:可以动态的裁剪and

在这里插入图片描述

trim 标签的属性:

prefix:在trim 标签中的语句前添加内容

suffix:在trim 标签中的语句后添加内容

prefixOverrides : 前缀覆盖去掉

suffixOverrides : 后缀覆盖掉

在这里插入图片描述

set标签:

主要是使用在update 语句当中,用来生成set 关键字,同时去掉最后多余的“ , ”

比如我们只提交不为空的字段,如果提交的数据是空,或者选择性的添加修改数据,那个这个字段将不会更新。
在这里插入图片描述

这三个标签在一起使用: 都不需要加 and 因为只会走一条语句
在这里插入图片描述

等同与:

if (){

} else if (){

} else {

}

只有一个分支会被选择

foreach 标签:

循环数组或集合,动态生成SQL

批量删除:

在这里插入图片描述在这里插入图片描述

第二种方式:

在这里插入图片描述

批量插入:

在这里插入图片描述

Mybatis 分页插件

pageHelper ( limit 当前页码 一 1)* 每页显示记录条数 , 每页显示记录条数

#{} 和$ {} 的区别:

#{} :先编译sql 语句,再给占位符传参数,底层是prepareStatement 实现,可以防止sql 注入,比较常用。

${} : 先进行sql 语句拼接,然后再编译SQL语句,底层是statement ,存在SQL 注入现象。只有在需要SQL语句关键字拼接的情况下才会用到。

什么时候使用$ {} ??

在这里插入图片描述

拼接表名

在这里插入图片描述

现实业务中,可能会出现分表存储数据的情况

Mybatis 参数处理

多参数:要使用@param 注解

在这里插入图片描述

大Map
在这里插入图片描述

列名跟Java 对象的属性名对应不上怎么办?

1:使用as 起别名

2:使用resultMap 进行结果映射

3:是否开启驼峰命名自动映射(配置settings) mapUnderscoreToCamelCase

0933)]

大Map

在这里插入图片描述

列名跟Java 对象的属性名对应不上怎么办?

1:使用as 起别名

2:使用resultMap 进行结果映射

3:是否开启驼峰命名自动映射(配置settings) mapUnderscoreToCamelCase

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

入夏忆梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值