动态SQL、缓存

 动态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/>标签

  • 回话关闭时,一级缓存的数据会保存到二级缓存中

  • 全局缓存

访问顺序

用户从顶层进来,数据库在底层

二级缓存 --> 一级缓存 --> 数据库

 
 
posted @ 2023-07-11 16:49  Hmzzz2  阅读(15)  评论(0编辑  收藏  举报