MyBatis学习笔记(五)动态SQL实现增删改查_缓存

上一篇: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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值