Mybatis-03
Mybatis-03
14、动态SQL语句
动态的sql语句是指,mysql通过配置,根据不同的参数值,生成不同的sql语句.
准备工作:
1 | |
14.1、if 语句
说明: if语句,可以动态的根据你的值来决定,是否需要动态的修改查询条件,最终产生不同的sql语句.
Mapper接口:
1 | |
Mapper.xml配置文件:
1 | |
测试代码:
1 | |
14.2、where 语句
说明: where语句,可以帮我们在多个动态语句中,有效的去掉前面的多余的and 或 or 之类的多余关键字
where语句还可以根据包含的内容是否有值, 有内容就添加where关键字.没内容不添加where关键字
1 | |
测试代码:
1 | |
14.3、trim语句
说明: trim 可以动态在包含的语句前面和后面添加内容。也可以去掉前面或者后面给定的内容
prefix 前面添加内容
suffix 后面添加内容
suffixOverrides 去掉的后面内容
prefixOverrides 去掉的前面内容
mapper.xml配置文件:
1 | |
测试的代码:
1 | |
14.4、choose( when , otherwise )语句
说明:choose when otherwise 可以执行多路选择判断,但是只会有一个分支会被执行。
类似switch case 语句
Mapper接口:
1 | |
Mapper.xml配置文件:
1 | |
测试代码:
1 | |
14.5、set语句
set语句可以删除set关键字 条件前后的 逗号
Mapper接口:
1 | |
mapper.xml配置文件:
1 | |
测试代码:
1 | |
14.6、foreach语句
foreach语句可以做遍历.经常用于以下两种情况的sql语句生成
select * from 表名 where id in( xx ,xx ,xx );
Mapper接口:
1 | |
Mapper.xml配置文件:
1 | |
测试代码:
1 | |
insert into 表名(列名,列名) values(值1,值2),(值1,值2),(值1,值2)
Mapper接口:
1 | |
Mapper.xml配置文件:
1 | |
测试的代码
1 | |
14.7、sql片段
是指将多个sql语句中公共部分的内容进行抽取.然后在每个sql语句是进行引入( 包含 ). 这样的好处,就是可以统一维护一分

15、mybatis缓存
缓存: 指的是把经常访问的数据保存到一个高速的缓冲区中.方便后面访问的时候可以快速的获取到这些数据.
名词,缓存是指被保存在高速缓冲区中的数据,也叫缓存
缓存只有一个目标,就是为了提高访问速度.
一级缓存: 同一个SqlSession对象
二级缓存: 同一个SqlSessionFactory对象.
15.1、mybatis的一级缓存的示例

1 | |
15.1.2、一级缓存的管理
缓存失效的四种情况:
1.不在同一个SqlSession对象中
1 | |
2.执行语句的参数不同。缓存中也不存在数据。
1 | |
3.手动清空缓存数据
1 | |
4.执行增,删,改,语句,会清空掉缓存
Mapper接口:
1 | |
mapper.xml配置文件:
1 | |
测试的代码:
1 | |
15.2、mybatis的二级缓存
二级缓存的图解示意

二级缓存的使用:
1、mybatis二级缓存默认不开启,需要到mybatis-config.xml配置文件中,通过settings配置启动

2、在Mapper.xml的配置文件中加入cache标签表示使用二级缓存。

3、需要被二级缓存的对象必须要实现java的序列化接口。
15.2.1、二级缓存的演示
1 | |
15.2.2、useCache=“false“**的演示和说明
在select标签上有一个useCache标签,表示是否使用二级缓存。默认值是true,表示使用。
1 | |
15.2.3、flushCache=“false“**的演示和说明
在update,delete,insert标签上,都有flushCache属性。表示是否清空缓存。默认是默认是true表示清空缓存。如果是false表示不清空缓存。
自定义二级缓存( 了解 )
一级缓存的默认实现类: org.apache.ibatis.cache.impl.PerpetualCache类
1、需要我们编写一个类去实现一个接口Cache.
1 | |
2、到mapper.xml配置文件中的cache标签里设置type属性的值

16、缓存的使用顺序说明:
1 当mybatis执行一个查询的时候,会先去二级缓存中查询数据。有就直接返回。
2 如果二级缓存中没有数据,再到一级缓存中获取,有就直接返回
3 如果二级,一级都没有要查的数据,则发sql语句到数据库查询
4 查到结果后会马上放到一级缓存中
5 当SqlSession关闭的时候,会把一级缓存中的数据同步到二级缓存中
17、mybatis 逆向工程
MyBatis逆向工程,简称MBG。是一个专门为MyBatis框架使用者定制的代码生成器。可以快速的根据表生成对应的映射文件,接口,以及Bean类对象。
在Mybatis中,有一个可以自动对单表生成的增,删,改,查代码的插件。
叫 mybatis-generator-core-1.3.2。
它可以帮我们对比数据库表之后,生成大量的这个基础代码。
这些基础代码有:
1、数据库表对应的javaBean对象
2、这些javaBean对象对应的Mapper接口
3、这些Mapper接口对应的配置文件
1 | |
17.1、准备数据库表
1 | |
mbg.xml配置文件:
1 | |
mybatis逆向工程运行代码:
1 | |
测试的代码:
1 | |