Mybatis动态SQl及缓存

动态SQL

动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。

使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言,MyBatis 显著地提升了这一特性的易用性。

标签:

  • if
  • choose (when, otherwise)
  • trim (where, set)
  • foreach
    在这里插入图片描述

if标签

在这里插入图片描述

choose (when, otherwise)标签

在这里插入图片描述

trim (where, set)标签

在这里插入图片描述

foreach标签

在这里插入图片描述

缓存

MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制。 为了使它更加强大而且易于配置,我们对 MyBatis 3 中的缓存实现进行了许多改进。

默认情况下,只启用了本地的会话缓存,它仅仅对一个会话中的数据进行缓存。 要启用全局的二级缓存,只需要在你的 SQL 映射文件中添加一行:

<cache/>

如果不配置cache时,需要将实例类序列化。

一级缓存

一级缓存mybatsi是自动开启,不用手动操作,而且关闭不了的,但是我们可以手动清除缓存。(SqlSession级别)
一级缓存的作用域在SqlSession开启和关闭之间。

二级缓存

开启二级缓存需要两个步骤,第一步在mybatis的全局配置文件中配置Setting属性,设置名为cacheEnabled的属性值为true即可

<!--显示的开启全局缓存-->
<setting name="cacheEnabled" value="true"/>

第二步:在具体需要二级缓存的mapeer映射文件中开启二级缓存,值需要在相应的映射文件中添加一个cache标签即可

<cache/>

二级缓存的作用域在一个Mapper中。

缓存原理图

在这里插入图片描述

缓存失效条件

并不是同一个Sqlsession对象
在查询的过程中,两次的查询条件不同
在两次之间进行了增,删,改,操作
在两次之间自己进行了手动清空缓存

参考原文:https://blog.csdn.net/qq_33369905/article/details/106647328
参考原文:https://blog.csdn.net/qq_38263083/article/details/82716702

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值