MyBatis 学习心得笔记

简介: MyBatis 学习心得笔记

MyBatis 高级映射

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

多对一: private Student student;

全局懒加载: lazyLoadingEnabled = true

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

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

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

一对多:

private List student ;

第一种方式:collection

84fc914a1bad4f38b575c791a34472ac.png

第二种分步查询:可复用性增强,支持延迟加载

5cbaacf3bd7a40be80104b46d0edd962.png

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 传递的三个值均为空的情况下

a1762aab85c04df4a198b602163cf629.png

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

ad6c27cc088141829ed36fbe503db49a.png

trim 标签的属性:

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

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

prefixOverrides : 前缀覆盖去掉

suffixOverrides : 后缀覆盖掉

7455339f1d6243579b4452ac7e791f83.png

set标签:

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

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

1893dfedd0994097bfc7124eb7078b24.png

这三个标签在一起使用: 都不需要加 and 因为只会走一条语句

b5bf32034eae49378247870b28e073f7.png

等同与:

if (){
} else if (){
} else {
}

只有一个分支会被选择

foreach 标签:

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

批量删除:

fad6290118434ee49875520463214537.png

480095fc72674e368bd57268c2db7f97.png

第二种方式:

550b27a3a3c04060960f9d27041226ef.png

批量插入:

d5968f581e334ec1b303c36dc7ec94f1.png

Mybatis 分页插件

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

#{} 和$ {} 的区别:

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

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

什么时候使用$ {} ??

21ecd1e69e64453bb186a50d0cf60791.png

拼接表名

9e6d33f5ad1f41ba8eb7e9aff97ab2a1.png

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

Mybatis 参数处理

多参数:要使用@param 注解

ccb1408d564440eab6d151df21286023.png

大Map

7c38d8e5f7d34258bdf07f6c1a869e55.png

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

1:使用as 起别名

2:使用resultMap 进行结果映射

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

0933)]

大Map

77d06c161d18490f9a4a646b7057aa10.png

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

1:使用as 起别名

2:使用resultMap 进行结果映射

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


目录
相关文章
|
18天前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
29 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
2月前
|
Java 关系型数据库 数据库连接
mybatis-plus学习
MyBatis-Plus ,MyBatis 最佳搭档,只做增强不做改变,为简化开发、提高效率而生。
44 5
|
6月前
|
Java 数据库连接 数据库
Mybatis逆向工程笔记小结
Mybatis逆向工程笔记小结
|
2月前
|
SQL Java 数据库连接
【Java笔记+踩坑】MyBatisPlus基础
MyBatisPlus简介、标准数据层开发CRUD、业务层继承IService、ServiceImpl、条件查询、LambdaQueryWrapper、id生成策略、逻辑删除、乐观锁@Version、代码生成器、ActiveRecord
【Java笔记+踩坑】MyBatisPlus基础
|
2月前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
3月前
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
3月前
|
Java 数据库连接 mybatis
后端框架的学习----mybatis框架(9、多对一处理和一对多处理)
这篇文章介绍了在MyBatis框架中如何处理多对一和一对多的关联查询,通过定义`<resultMap>`和使用`<association>`与`<collection>`元素来实现对象间的关联映射。
|
3月前
|
Java 数据库连接 测试技术
后端框架的学习----mybatis框架(8、lombok)
这篇文章介绍了如何在MyBatis框架中使用lombok库来简化Java实体类的编写,包括在IDEA中安装Lombok插件、在项目中导入lombok依赖以及在实体类上使用Lombok提供的注解。
|
3月前
|
Java 数据库连接 数据库
后端框架的学习----mybatis框架(6、日志)
这篇文章介绍了如何在MyBatis框架中使用日志功能,包括配置MyBatis的日志实现、使用log4j作为日志工具,以及如何通过配置文件控制日志级别和输出格式。
|
3月前
|
SQL Java 数据库连接
后端框架的学习----mybatis框架(5、分页)
这篇文章介绍了如何在MyBatis框架中实现分页功能,包括使用SQL的`limit`语句进行分页和利用MyBatis的`RowBounds`对象进行分页的方法。