Mybatis 动态SQL实现

Mybatis 动态SQL实现

动态SQL介绍

动态SQL是Mybatis的强大特性之一,可以简化根据不同条件使用不同SQL的操作,并自动去除不需要的关键字。在Mybatis3中引入了OGNL表达式,使学习元素种类的过程变得简易。

动态SQL使用

if 元素

<select id="findActivePersonLike" resultType="Person">
  SELECT * FROM Person WHERE state = ‘ACTIVE’
  <if test="name != null">
    AND name like #{name}
  </if>
  <if test="age != null">
    AND age = #{age}
  </if>
</select>

choose、when、otherwise 元素

<select id="findActivePersonLike" resultType="Person">
  SELECT * FROM Person WHERE state = ‘ACTIVE’
  <choose>
    <when test="name != null">
      AND name like #{name}
    </when>
    <when test="age != null">
      AND age = #{age}
    </when>
    <otherwise>
      AND phone_number != null
    </otherwise>
  </choose>
</select>

trim、where、set 元素

<select id="findActivePersonLike" resultType="Person">
  SELECT * FROM Person
  <where>
    <if test="name != null">
         name = #{name}
    </if>
    <if test="age != null">
        AND age = #{age}
    </if>
    <if test="birthdayYear != null">
        AND YEAR(birthday) = #{birthdayYear}
    </if>
  </where>
</select>

where元素只会在子元素返回任何内容的情况下才插入“WHERE”子句。而且,若子句的开头为“AND”或“OR”,where元素也会将它们去除。

如where元素无法满足要求,可以用trim定制where元素的功能,使之更加灵活。

<trim prefix="WHERE" prefixOverrides="AND |OR ">
  ...
</trim>

以上trim元素的定义,等同于where元素的效果。prefixOverrides属性会忽略通过管道符分隔的文本序列,该属性中的值会被移除,并且插入prefix属性中指定的内容。

set语句用于动态生成数据库更新SQL,如下:

<update id="updatePersonIfNecessary">
  update Person
    <set>
      <if test="name != null">name=#{name},</if>
      <if test="age != null">age=#{age},</if>
      <if test="phoneNumber != null">phone_number=#{phoneNumber},</if>
      <if test="birthday != null">birthday=#{birthday}</if>
    </set>
  where id=#{id}
</update>

set元素会动态在首行加入set关键字,并去除if标签不满足要求时的尾部逗号。同样,set元素也可以被trim元素等价替换,如下:

<trim prefix="SET" suffixOverrides=",">
  ...
</trim>

foreach 元素

<select id="selectPersonNameIn" resultType="Person">
  SELECT * FROM Person
  <where>
    <foreach item
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值