MyBatis-动态SQL
2021/7/4 19:24:34
本文主要是介绍MyBatis-动态SQL,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
今天学习了动态SQL,回顾一下
动态SQL就是在SQL层面执行逻辑代码
1、 if
最常见情景是根据条件包含 where 子句的一部分;
test=" " 里的是判断条件;
where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除,这一特性让我们再也不用写where 1=1 了 QAQ。
<select id="getBlogByIF" parameterType="map" resultType="Blog"> select * from blog <where> <if test="title != null"> title = #{title} </if> <if test="author != null"> and author = #{author} </if> </where> </select>
2、choose (when, otherwise)
choose就相当于我们以前用的switch语句,只选取第一个符合的条件执行;
如果第一个when条件成立,则后面的when就会失效;
ortherwise 就是备选方案,可以为空。
<select id="getBlogByChoose" resultType="Blog"> select * from blog <where> <choose> <when test="id != null"> id = #{id} </when> <when test="title != null"> and title = #{title} </when> <otherwise> </otherwise> </choose> </where> </select>
3、trim (where, set)
set 元素大多用于update语句,可以动态包含需要更新的列,忽略其它不更新的列;
set 元素会动态地在行首插入 SET 关键字,并会删掉额外的逗号(这些逗号是在使用条件语句给列赋值时引入的);
<update id="updateBlogBySet" parameterType="map"> update blog <set> <if test="title != null"> title = #{title}, </if> <if test="author"> author = #{author}, </if> </set> where id = #{id} </update>
其实 set 元素和where元素都是通过trim元素来实现对应的功能的
我们也可以通过自定义 trim 元素来定制 where 元素的功能
与where 元素等价的自定义 trim 元素为:
//prefixOverrides 属性会忽略通过管道符分隔的文本序列(注意此例中的空格是必要的) //会移除所有 prefixOverrides 属性中指定的内容, //并且插入 prefix 属性中指定的内容 <trim prefix="WHERE" prefixOverrides="AND |OR "> ... </trim>
与 set 元素等价的自定义 trim 元素为:
<trim prefix="SET" suffixOverrides=","> ... </trim>
我觉得吧,新手会用where和set就够了(个人愚见),后面需要时再回来回顾trim吧 QAQ
4、foreach
动态 SQL 的另一个常见使用场景是对集合进行遍历(尤其是在构建 IN 条件语句的时候)
foreach提供给我们遍历集合的功能,提取集合中的元素插入到sql语句中
foreach一共有6个参数
clooection :需要遍历的集合
open :开头字符串
close :结尾字符串
separator : 分隔符
item : 集合中的元素
index : 当使用 Map 对象(或者 Map.Entry 对象的集合)时,item对应的键
<select id="getBlogByForeach" resultType="Blog"> select * from blog <where> <foreach collection="ids" open="and (" close=")" separator="or" item="id"> id = #{id} </foreach> </where> </select>
还有一个就是关于代码的复用
sql标签可以实现代码的复用
<sql id="ifTest"> <if test="title != null"> title = #{title} </if> <if test="author != null"> and author = #{author} </if> </sql>
在需要使用这段代码的地方加上incude即可引用
<select id="getBlogByIF" parameterType="map" resultType="Blog"> select * from blog <where> <include refid="ifTest"></include> </where> </select>
这篇关于MyBatis-动态SQL的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27消息中间件底层原理资料详解
- 2024-11-27RocketMQ底层原理资料详解:新手入门教程
- 2024-11-27MQ底层原理资料详解:新手入门教程
- 2024-11-27MQ项目开发资料入门教程
- 2024-11-27RocketMQ源码资料详解:新手入门教程
- 2024-11-27本地多文件上传简易教程
- 2024-11-26消息中间件源码剖析教程
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器