动态SQL、缓存
动态SQL指的是根据不同的查询条件 , 生成不同的Sql语句
if、where、set、choose等在xml文件中以标签的形式存在
where:多条件查询时,去除多余的and
set:去除多余逗号
trim:动态拼接时去除 SQL 的前缀、后缀
<trim prefix ="where" prefixOverrides="and | or">
</trim>
-
prefix 属性: 拼接前缀
-
suffix 属性: 拼接后缀
-
prefixOverrides 属性:去除前缀
-
suffixOverrides 属性:去除后缀
foreach:相当于 Java 中的 for 循环,可实现数据库批量操作
<foreach collection="list" item="i" index="index" open="(" separator="," close=")">
#{i.id}
</foreach>
-
collection 属性: 用来指定循环遍历的参数类型,如果参数类型为 List,则该值为 list。如果参数类型为数组,则该值为 array。
-
item 属性: 循环的key(可以自定义 key 值),如果传入的集合是实体类类型的,可以通过 key.集合中的属性来获取数据,如果就是普通的 add 存储就直接遍历 key 即可
-
index 属性: 循环的下标顺序
-
open 属性: 指定循环开始的内容
-
close 属性: 指定循环结束的内容
-
separator 属性: 指定循环在每次迭代时所使用的分隔符(根据需求自定义使用什么)
choose、when、otherwise:去除多余条件
类似于Java 的 switch 语句,choose 为 switch,when 为 case,otherwise 则为 default
sql片段:将某个 sql 语句代码抽取出来,使用时直接调用
-
提取:
<sql id="if-title-author">
</sql>
-
引用:
<where>
<include refid="if-title-author"></include>
</where>
一级缓存
-
会默认启用
-
本地缓存
-
仅对一个会话(sqlsession)中的数据进行缓存
二级缓存
-
<cache/>标签
-
回话关闭时,一级缓存的数据会保存到二级缓存中
-
全局缓存
访问顺序
用户从顶层进来,数据库在底层