mybatis 的 trim 标签 用法

Mybatis 的 mapper.xml文件 中 sql语句之 trim标签用法

一、prefix和prefixOverrides用法的基本步骤

如果prefixOverrides有元素,拿元素去匹配 第一个子标签sql语句(满足if条件匹配成功的sql片段),若匹配上,就删掉sql语句的匹配部分,如果 prefix 有值 那么就会在第一个通过if判断的语句前边加上 prefix的值

<select id="selectUsersTrim" resultMap="resultListUsers" parameterType="Users">
      select * from users      
	 <trim prefix="where" prefixOverrides="and ">               
           <if test="name!=null">               
               name=#{name}          
           </if>          
           <if test="address!=null">               
               and address=#{address}          
           </if>               
      </trim>      
</select>

比如上述代码块,有以下几种情况

  1. 假设,第一个if语句和第二个if语句全部通过,那么最终的sql语句就是:select * from users where name = ? and address = ?
    这个sql是标准的写,prefixOverrides=“and” 去检测第一个if标签里的sql片段 如果有and 就覆盖掉,这里明显没有 prefix=“where” 就会在 第一个if的前边加上 where

  2. 假设,只有第一个if语句通过,那么最终的sql语句就是:select * from users where name = ?
    这个sql中prefixOverrodes=“and” 它也是去检测第一个if标签里 有没有and 这里明显也没有 ,prefix=“where” 会在该语句前边加上where

  3. 假设,只有第二个if语句通过,那么最终sql语句为:select * from users where address = ?
    可以看到and不见了 这时 prefixOverrides=“and” 会去匹配这个代码片段 发现有 and 那么就会把代码片段中的 and 覆盖掉(注意是 and_ 这里还有个空格)

-----------------------------------------——————————————--------------------------------------------
二、suffix和suffixOverrides用法的基本步骤

如果suffixOverrides有元素,拿元素去匹配 最后一个子标签sql语句(满足if条件匹配成功的sql片段),若匹配上,就删掉sql语句的匹配部分,如果 prefix 有值 那么就会在第一个通过if判断的语句后边加上 suffix的值

    <update id="updateBlog" parameterType="map">
        update db5.blog
        <trim prefix="set" suffixOverrides=",">
            <if test="title != null">
                title = #{title},
            </if>
            <if test="author != null">
                author = #{author}
            </if>
        </trim>
        where id = #{id}
    </update>

比如上述代码块,有以下几种情况

  1. 假设,第一个if语句和第二个if语句全部通过,那么最终的sql语句就是:update db5.blog set title = ?, author = ? where id = ?
    这个sql是标准的写,prefix=“set” 会在 第一个 通过if条件的sql片段前边加上 set 。

    suffixOverrides=","会去匹配,最后一个通过if判断的sql片段,如果有 “,” 那么 就覆盖掉 这里最后一个片段是 author = #{author}明显是没有, 的 所以 不会做任何操作

  2. 假设,只有第一个if语句,那么最终的sql语句就是:update db5.blog set title = ? where id = ?
    ,prefix=“set” 会在 第一个 通过if条件的sql片段前边加上 set 。

    suffixOverrides=","会去匹配,最后一个通过if判断的sql片段,如果有 “,” 那么 就覆盖掉 这里最后一个片段是 title = #{title}, 明显 是有 , 的 所以 会去 覆盖掉 suffixOverrides 的值 即–> ,

  3. 假设,只有第二个if语句,那么最终的sql语句就是:update db5.blog set author = ? where id = ?
    ,prefix=“set” 会在 第一个 通过if条件的sql片段前边加上 set 。

    suffixOverrides=","会去匹配,最后一个通过if判断的sql片段,如果有 “,” 那么 就覆盖掉 这里最后一个片段是 author = #{author} 明显 是没有 , 的 所以 不会去做操作。

总结 :

1. 要知道 这个 动态sql 代码块的 执行流程 什么时候 通过 if 什么时候 不通过
2.要深刻理解 prefix,prefixOverrides,suffix,suffixOverrides 的 功能!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值