动态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