Mybatis中trim标签的理解

匿名 (未验证) 提交于 2019-12-03 00:22:01
trim标签的作用是可以在trim标签内容前面加上prefix定义的前缀,也可以在其后加上suffix定义的后缀; prefixOverrides和suffixOverrides可以把包含内容的首部或者尾部某些内容覆盖,也就是忽略掉。   
  • 1
  • 2
  • 3
  • 4
  • 5
select * from user    <trim prefix="WHERE" prefixOverrides="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>
  • 1
  • 2
  • 3
  • 4
  • 5
假如说name和gender的值都不为null的话,打印的SQL为: 
  • 1
  • 2
select * from user where name = 'xx' and gender = 'xx'
  • 1

where后不存在and,这是因为prefixOverrides="AND |OR"代表去掉第一个and或者是or。

2、代码为: 
  • 1
  • 2
update user   <trim prefix="set" suffixOverrides="," suffix=" where id = #{id} ">     <if test="name != null and name.length()>0"> name=#{name} , </if>     <if test="gender != null and gender.length()>0"> AND gender=#{gender} ,  </if>   </trim>
  • 1
  • 2
  • 3
  • 4
  • 5
假如说name和gender的值都不为null的话,打印的SQL为: 
  • 1
  • 2
update user set name='xx' , gender='xx' where id='x'
  • 1

可以参考第一个例子理解。

3、代码为: 
  • 1
  • 2
<insert id="save" parameterType="NoticeEntity">         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>     </insert>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

这个标签主要用于动态拼接sql语句,特别适用于不确定几个查询条件的时候使用

trim标签的作用是可以在trim标签内容前面加上prefix定义的前缀,也可以在其后加上suffix定义的后缀; prefixOverrides和suffixOverrides可以把包含内容的首部或者尾部某些内容覆盖,也就是忽略掉。   
  • 1
  • 2
  • 3
  • 4
  • 5
select * from user    <trim prefix="WHERE" prefixOverrides="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>
  • 1
  • 2
  • 3
  • 4
  • 5
假如说name和gender的值都不为null的话,打印的SQL为: 
  • 1
  • 2
select * from user where name = 'xx' and gender = 'xx'
  • 1

where后不存在and,这是因为prefixOverrides="AND |OR"代表去掉第一个and或者是or。

2、代码为: 
  • 1
  • 2
update user   <trim prefix="set" suffixOverrides="," suffix=" where id = #{id} ">     <if test="name != null and name.length()>0"> name=#{name} , </if>     <if test="gender != null and gender.length()>0"> AND gender=#{gender} ,  </if>   </trim>
  • 1
  • 2
  • 3
  • 4
  • 5
假如说name和gender的值都不为null的话,打印的SQL为: 
  • 1
  • 2
update user set name='xx' , gender='xx' where id='x'
  • 1

可以参考第一个例子理解。

3、代码为: 
  • 1
  • 2
<insert id="save" parameterType="NoticeEntity">         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>     </insert>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

这个标签主要用于动态拼接sql语句,特别适用于不确定几个查询条件的时候使用

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!