(十一)MyBatis的动态SQL:trim元素

trim标记是一个格式化的标记,可以完成select,update,insert语句的格式化操作。trim元素的主要功能有四个:
(1)可以在包含的内容前加上某些前缀,与之对应的属性是prefix;
(2)也可以在包含的内容后加上某写后缀,与之对应的属性是suffix;
(3)可以把包含内容的首部某些内容覆盖,即忽略,对应的属性是prefixOverrides
(4)也可以把包含内容的尾部的某些内容覆盖,对应的属性是suffixOverrides。

以下举例说明一下trim元素的应用场景:

例子1:

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>

假如说name和gender的值都不为null的话打印的SQL为:
select * from user where name = 'xx' and gender = 'xx'
where后不存在and,这是因为prefixOverrides="AND|OR"代表去掉第一个and或者是or。

例子2:

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

假如说name和gender的值都不为null的话打印的SQL为:
update user set name='xx', gender='xx' where id='x'
在gender='xx'后面不存在逗号,而且自动加了一个set前缀和where后缀。

例子3:

INSERT INTO S_NOTICE 
<trim prefix="(" suffix=")" suffixOverrides=",">
    ID,
    <if test="title != null">TITLE,</if>
    <if test="content != null">CONTENT,</if>
    <if test="noticeStatus != null">NOTICE_STATUS,</if>
    <if test="createdBy != null">CREATED_BY,</if>
    CREATED_TS,
    <if test="lastUpdBy != null">LAST_UPD_BY,</if>
    LAST_UPD_TS,
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
    SYS_GUID(),
    <if test="title != null">#{title,jdbcType=VARCHAR},</if>
    <if test="content != null">#{content,jdbcType=VARCHAR},</if>
    <if test="noticeStatus != null">#{noticeStatus,jdbcType=VARCHAR},</if>
    <if test="createdBy != null">#{createdBy,jdbcType=VARCHAR},</if>
    systimestamp,
    <if test="lastUpdBy != null">#{lastUpdBy,jdbcType=VARCHAR},</if>
    systimestamp,
</trim>

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

军刀0923

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值