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


目录
相关文章
|
4天前
|
SQL Java 数据库连接
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
|
6天前
|
Java 关系型数据库 数据库连接
MyBatis-Plus全套笔记一
MyBatis-Plus全套笔记一
|
2月前
|
SQL XML Java
学习Mybatis相关知识
一、什么是Mybatis? 1、Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。开发人员直接编写原生态sql,即可严格控制sql执行性能、且灵活度高。
13 0
|
2月前
|
XML Java 数据库连接
Mybatis-Plus学习小项目及详细教程
Mybatis-Plus学习小项目及详细教程
|
4月前
|
SQL 缓存 Java
Mybatis学习文章
Mybatis学习文章
|
4月前
|
SQL Java 数据库连接
还在为学MyBatis发愁?史上最全,一篇文章带你学习MyBatis
还在为学MyBatis发愁?史上最全,一篇文章带你学习MyBatis
|
5月前
|
XML SQL Java
今日记录:学习一个Mybatis的技能之choose 和 bind
今日记录:学习一个Mybatis的技能之choose 和 bind
26 1
|
5月前
|
算法 数据库
MYSQL-mybatisplus的主键自增问题与@Tableld@TableField@TableLogic的学习
关于org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.laoyang.Mapper.BookMapper.deleteById问题
|
6月前
|
SQL XML Java
Mybatis框架使用的学习
在沃尔玛项目中的Mybatis框架使用了两种实现CRUD的模式,为Dao文件编写相应的xml实现功能与直接在Dao的方法中直接使用注解开发
28 1
|
6月前
|
SQL Java 数据库连接
[推荐] MyBatis框架初学笔记-为之后拾遗
[推荐] MyBatis框架初学笔记-为之后拾遗
40 0