Mybatis入门(十) 动态SQL
2021/8/31 2:06:07
本文主要是介绍Mybatis入门(十) 动态SQL,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
动态SQL的官方解释:
动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。
本质上动态SQL就是在SQL层面,执行对应的逻辑代码,实际上还是一个sql语句
mybatis提供四个标签进行sql的动态的处理
- if
- choose (when, otherwise)
- trim (where, set)
- foreach
if标签的使用
//if标签内test写上对应逻辑代码,相当于if() <update id="updateBlog" parameterType="map"> update bloghys <set> <if test="author !=null"> author = #{author}, </if> <if test="view !=null"> view = #{view} </if> </set> where id=#{id} </update>
trim(where,set)标签的使用,相应说明在下面代码注释中
//where实例,where标签内会自动清楚多余and 和or,当子属性一个至少有一个条件满足时,where才会插入。 //例如title参数是空,where就不会插入 <select id="selectBlog" parameterType="map" resultType="blog"> select * from bloghys <where> <if test="title !=null"> and title like concat('%',#{title},'%') </if> </where> </select> //set实例,set标签内会自动清楚多余的",",当子属性一个至少有一个条件满足时,set才会插入。 <update id="updateBlog" parameterType="map"> update bloghys <set> <if test="author !=null"> author = #{author}, </if> <if test="view !=null"> view = #{view} </if> </set> where id=#{id} </update> //trim标签实例,where和set其实都trim标签,它有四个参数可以使用 //prefix表示插入最前面的需要插入的字段,suffix表示最后面的字段 //suffixOverrides表示结尾剔除的东西 //prefixOverrides表示开头剔除的东西 下面就是set的例子,和set效果一致 <update id="updateBlog" parameterType="map"> update bloghys <trim prefix="set" suffixOverrides=","> <sql id="if-author-view"> <if test="author !=null"> author = #{author}, </if> <if test="view !=null"> view = #{view} </if> </sql> </trim> where id=#{id} </update>
choose(when,otherwise)使用
//相当于java的switch语句,选择一个且只能选择一个,条件满足时,其他when就不在匹配,所有的when都不满足,就会满足oherwise <select id="selectBlogChoose" parameterType="map" resultType="blog"> select * from bloghys <where> <choose> <when test="title !=null"> and title=#{title} </when> <otherwise> and view=#{view} </otherwise> </choose> </where> </select>
foreach的使用,这个使用入参时区分三种情况,当入参是集合时,collection=list,当入参是数组是collection=array,
当入参是map集合时,collection等于map里对应key值
//foreach有六个参数,collection对标集合,item代表集合里每个元素,名字随便取,下面语句会使用这个参数, //index代表索引,一般不用,open代表返回的集合以什么开始,cloes代表以什么结束,
separator代表分隔符,一般都是用来in(1,2,3) 所以open="(" close=")" separator="," 一般这样使用
<select id="selectBlogbyForeach" parameterType="list" resultType="blog"> select * from bloghys <where> id in <foreach collection="list" open="(" close=")" separator="," item="item"> #{item} </foreach> </where> </select>
SQL片段使用
当需要用的sql语句存在大幅使用时,可以将他提取为公共片段,然后用include引入,代码如下
<update id="updateBlog" parameterType="map"> update bloghys <trim prefix="set" suffixOverrides=","> <include refid="if-author-view"></include> </trim> where id=#{id} </update> <sql id="if-author-view"> <if test="author !=null"> author = #{author}, </if> <if test="view !=null"> view = #{view} </if> </sql>
这篇关于Mybatis入门(十) 动态SQL的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-29RocketMQ底层原理资料详解:新手入门教程
- 2024-11-29RocketMQ源码资料解析与入门教程
- 2024-11-29[开源]6.1K star!这款电视直播源神器真的太赞啦!
- 2024-11-29HTTP压缩入门教程:轻松提升网页加载速度
- 2024-11-29JWT开发入门指南
- 2024-11-28知识管理革命:文档软件的新玩法了解一下!
- 2024-11-28低代码应用课程:新手入门全攻略
- 2024-11-28哪些办公软件适合团队协作,且能够清晰记录每个阶段的工作进展?
- 2024-11-28全栈低代码开发课程:零基础入门到初级实战
- 2024-11-28拖动排序课程:轻松掌握课程拖动排序功能