MyBatis 支持使用动态 SQL ,灵活配置 SQL 语句。
主要的 MyBatis 动态 SQL 语句有:
if, choose, when, otherwise, where, trim, set, foreach
1.if
if语句用于根据条件进行筛选用。
(注,代码来自iteye)
- <select id="dynamicIfTest" parameterType="Blog" resultType="Blog">
- select * from t_blog where id = 1
- <if test="title != null">
- and title = #{title}
- </if>
- <if test="content != null">
- and content = #{content}
- </if>
- <if test="owner != null">
- and owner = #{owner}
- </if>
- </select>
if 标签中含有属性 test,配置的是判断条件,判断条件中可以使用 and or 等逻辑语句进行多条件判断。
2.choose, when, otherwise
when 语句相当于常见的 switch-case 语句,与 otherwise 匹配,相当于 default。
- <select id="dynamicChooseTest" parameterType="Blog" resultType="Blog">
- select * from t_blog where id = 1
- <choose>
- <when test="title != null">
- and title = #{title}
- </when>
- <when test="content != null">
- and content = #{content}
- </when>
- <otherwise>
- and owner = "owner1"
- </otherwise>
- </choose>
- </select>
与 if 类似,when 标签中也有 test 属性,内容填写条件。
3.where
where 可以代替 SQL 语句中的 where ,可以更加灵活地搭配动态 SQL 语句。
- <select id="dynamicWhereTest" parameterType="Blog" resultType="Blog">
- select * from t_blog
- <where>
- <if test="title != null">
- title = #{title}
- </if>
- <if test="content != null">
- and content = #{content}
- </if>
- <if test="owner != null">
- and owner = #{owner}
- </if>
- </where>
- </select>
如代码所示,如果 <where>标签中的 if 都不符合的话,则不会产生 select * from t_blog where 这样诡异的语句,一切都会被自动修改成正确的。
4.trim
trim 的英文汉译是“修饰”,这个语句在 Mybits 中的作用也是修饰作用。
- <select id="dynamicTrimTest" parameterType="Blog" resultType="Blog">
- select * from t_blog
- <trim prefix="where" prefixOverrides="and |or">
- <if test="title != null">
- title = #{title}
- </if>
- <if test="content != null">
- and content = #{content}
- </if>
- <if test="owner != null">
- or owner = #{owner}
- </if>
- </trim>
- </select>
trim 的属性如下
prefix:前缀覆盖并增加其内容
suffix:后缀覆盖并增加其内容
prefixOverrides:前缀判断的条件
suffixOverrides:后缀判断的条件
实际应用中,trim 可以去替代 where,set 等标签,不过应用的并不是很广。
5.set
set 标签是用做 update SQL 语句中的 set 替代的,所以一般用于更新语句。
- <update id="dynamicSetTest" parameterType="Blog">
- update t_blog
- <set>
- <if test="title != null">
- title = #{title},
- </if>
- <if test="content != null">
- content = #{content},
- </if>
- <if test="owner != null">
- owner = #{owner}
- </if>
- </set>
- where id = #{id}
- </update>
如果 set 条件中没有满足的,则会出现错误。
6.foreach
foreach 使用比较多样,作用是可以迭代一个集合类的数据。可以迭代的类型有三种,分别是 List, Array, Map。
foreach 有6个参数
collection:表示参数形式,即 List, Array, Map
index:指的是迭代过程中每次迭代到的位置
item:迭代的时候的别名
open:开始时的符号
separator:分割符号
close:结束时的符号
- <select id="dynamicForeachTest" resultType="Blog">
- select * from t_blog where id in
- <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
- #{item}
- </foreach>
- </select>
感谢你的赏识与认可
支付宝
微信支付
使用手机访问这篇文章
本文许可协议 © CC BY-NC-SA 4.0 转载请注明来源
- 上一篇: 使用MacType分分钟修改Windows为苹果字体
- 下一篇: 1200长途跋涉,回家过年
暂无评论