MyBatis3 动态sql常用标签

MyBatis3 动态sql常用标签


动态sql是MyBatis的一大特性。

动态sql说白了就是在不改变数据库语言上进行添加标签完成相对复杂的操作功能。意思就是不能改变最终的数据库语言。

下面我介绍项目中最常用的几个标签


1、if标签
if标签类似java代码中的if,满足条件,则添加if标签内的sql语句。
例如:

<select id="qeuryStaff">
  SELECT * FROM STAFF WHERE staff_sex= ‘男’
  <if test="title != null">
    AND title like #{title}
  </if>
  <if test="author != null and author.name != null">
    AND author_name like #{author.name}
  </if>
</select>

2、choose(when、otherwise)
类似 Java 中的 switch 语句
例如:符合某一个的条件则按哪句sql进行,注意和if标签的区别。

<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG WHERE state = ‘ACTIVE’
  <choose>
    <when test="title != null">
      AND title like #{title}
    </when>
    <when test="author != null and author.name != null">
      AND author_name like #{author.name}
    </when>
    <otherwise>
      AND featured = 1
    </otherwise>
  </choose>
</select>

3、foreach

任何可迭代对象(如 List、Set 等)、Map 对象或者数组对象作为集合参数传递给 foreach。

foreach多与in 搭配使用,例如:

   		   <if test="black_staff != null and black_staff.length > 0">
				AND rpb.double_STAFF_ID in
				<foreach collection="black_staff" item="item" index="index" open="(" separator="," close=")">
					#{item}
				</foreach>
		   </if>
colleaction是属性中的集合;
item是遍历出来的每个元素;
open是循环结果前边的东西;
close是循环结果后边要加的东西;
separator是循环结果用什么符号分隔;

4、set
set标记是mybatis提供的一个智能标记,一般将其用在修改的sql中

<update>
    update user 
    <set>
      <if test="name != null and name.length()>0">name = #{name},</if>
      <if test="gender != null and gender.length()>0">gender = #{gender},</if>
    </set>
    where id = #{id}
  </update>

在上述的代码片段当中,假如说现在三个字段不为null时,那么上面得到的SQL语句是:
update user set name=‘xxx’ , gender=‘xx’ where id=‘x’
 在上面gender='xx’的后面是没有逗号的,所以说set标记已经自动帮助我们把最后一个逗号给去掉了。


5、trim(set、where)
trim标记是一个格式化标记,可以完成set或者是where标记的功能

select * from user 

  <trim prefix="WHERE" prefixoverride="AND |OR">

    <if test="name != null and name.length()>0"> AND name=#{name}</if>

    <if test="gender != null and gender.length()>0"> AND gender=#{gender}</if>

  </trim>

这里prefix是指添加前缀where,prefixoverride是指删除多余的前缀AND或者是OR。
所以以上代码假如说name和gender的值都不为null的话打印的SQL为:select * from user where name = ‘xx’ and gender = ‘xx’

属性名解释
prefix要添加的前缀
prefixOverrides要删除的前缀
suffix要添加的后缀
suffixOverrides要删除的后缀

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值