上一篇:MyBatis学习笔记(四)Lombok_resultMap(JavaBean属性名和数据库中的字段名称不一致;一对多多对一的查询)
本文提到的文件只有需要修改的,其余还是按照之前笔记一的进行
动态SQL:是根据不同条件生成不同的语句
一、准备工作
1. 数据库建表以及JavaBean
看上去数据库和JavaBean的字段不一致,实际上setting中存在这样的设置,可以让两种命名方式转化
2. 建立一个工具类,用于随机生成一串用户Id
3. 插入数据 (省略addBlog实现部分代码)
二、正式使用动态SQL
1. if 标签
注意:第二张图的“where 1=1"是为了拼接正常,如果没有 ”1=1“ 且后面两个都没有达到拼接条件,语法出错。
于是引出了where 标签
2. where 标签
3. choose-when
相当于switch case语句,每一句默认自带break
也就是选择一句执行
我认为也类似于if->else if->else
4. set标签
这个标签的作用就是当只选择其中某部分拼接时,可能句尾会有多余的逗号,此时会自动帮助去掉,使语法保持正确
5. foreach标签
想要拼接成这个样子
6. sql片段,提取几个sql的公共部分,再引入
上面的sql可以优化如下
三、缓存
1. 作用
缓存只是用来读数据的,不能写数据。用户查询数据库要从硬盘找,很慢。所以将查询出来的数据暂时保存在内存中,这样也有利于解决高并发问题。
2. 一级缓存实验
打开日志工厂
(1)对同一条数据连续查询两次,根据日志输出发现只查询了一次
这个就是一级缓存,也叫本地会话缓存,是默认开启的,不用设置!!
(2)对不同数据查询发现查了两次
(3)对相同数据查两次的中间修改了其他数据,也要查两次
3. 二级缓存实验
(1)开启二级缓存的方法,添加一个标签,并且在设置中开启
UserMapper.xml
标签也可以添加参数
还要把实体类序列化
(2)工作机制
(3)查询数据的过程
(4)设置某项查询不缓存
如果某数据更新过于频繁,不适合放到缓存
4. 使用第三方的Ehcache
本部分是基于二级缓存的基础上修改的,不变的部分不再赘述
(1)导包
(2)开启缓存
(3)新建配置文件
<?xml version=1.0 encoding=UTF-8 ?>
<ehcache xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:noNamespaceSchemaLocation=http://ehcache.org/ehcache.xsd
updateCheck=false>
<diskStore path=./tmpdir/Tmp_EhCache/>
<defaultCache
eternal=false
maxElementsInMemory=10000
overflowToDisk=false
diskPersistent=false
timeToIdleSeconds=1800
timeToLiveSeconds=259200
memoryStoreEvictionPolicy=LRU/>
<cache
name=cloud_user
eternal=false
maxElementsInMemory=5000
overflowToDisk=false
diskPersistent=false
timeToIdleSeconds=1800
timeToLiveSeconds=1800
memoryStoreEvictionPolicy=LRU/>
</ehcache>