mybatis框架xml下trim中的prefix与suffix等标签的用法

 更新时间:2021年07月13日 10:03:06   作者:徐林2333  
这篇文章主要介绍了mybatis框架xml下trim中的prefix与suffix等标签的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

trim中prefix与suffix等标签用法

1.prefix 前缀增加的内容

2.suffix 后缀增加的内容

3.prefixOverrides 前缀需要覆盖的内容,一般是第一个判断条件前面的多余的结构,如:第一个判断条件前面多了 ‘and'

select * from User where name='zhangsan' and age='20';
<select id='queryUser'>
        select * from User
        <trim prefix='where' prefixOverrides='and'>
            <if test="name != null and name != ''">
                name = #{name}
            </if>
            <if test="age !=null and age !=''">
                and age = #{age}
            </if>
        </trim>
<select>

第一个条件前面没有任何符号,第二个条件要加上and,否则sql语句会报错。很理想的状态是第一个和第二个都有值,但是既然判断,说明也可能会没有值,当第一个name没有值的时候,这个时候sql语句就会是 select * from User where and age='',很明显这个sql语句语法存在问题。

在这里标签属性prefixOverrides就起作用了,它会让前缀where覆盖掉第一个and。覆盖之后的是:select * from User where age='';

4.suffixOverrides 后缀需要覆盖的内容,一般是最后一个数据的后面符号,如:set值的时候,最后一个值的后面多一个逗号‘,'

 <insert id="insertSelective" parameterType="org.javaboy.vhr.model.Salary">
        insert into salary
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">
                id,
            </if>
            <if test="basicSalary != null">
                basicSalary,
            </if>
            <if test="bonus != null">
                bonus,
            </if>
            <if test="lunchSalary != null">
                lunchSalary,
            </if>
            <if test="trafficSalary != null">
                trafficSalary,
            <if test="name != null">
                name,
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">
                #{id,jdbcType=INTEGER},
            </if>
            <if test="basicSalary != null">
                #{basicSalary,jdbcType=INTEGER},
            </if>
            <if test="bonus != null">
                #{bonus,jdbcType=INTEGER},
            </if>
            <if test="lunchSalary != null">
                #{lunchSalary,jdbcType=INTEGER},
            </if>
            <if test="trafficSalary != null">
                #{trafficSalary,jdbcType=INTEGER},
            </if>
    		 <if test="name != null">
                #{name,jdbcType=VARCHAR},
            </if>
        </trim>
    </insert>

加了suffixOverrides=","

结果:

insert into salary (id,basicSalary,bonus,lunchSalary,trafficSalary,name) values (#{id},#{basicSalary},#{bonus},#{lunchSalary},#{trafficSalary},#{name})

不加suffixOverrides=","

结果:

insert into salary (id,basicSalary,bonus,lunchSalary,trafficSalary,name,) values (#{id},#{basicSalary},#{bonus},#{lunchSalary},#{trafficSalary},#{name},)

加了suffixOverrides=","的话,本例中最后一个条件中的逗号“,”会被后缀覆盖掉

mybatis之 trim prefix="(" suffix=")"

1.如下所示

<trim prefix="" suffix="" suffixOverrides="" prefixOverrides=""></trim>

prefix:在trim标签内sql语句加上前缀。

suffix:在trim标签内sql语句加上后缀。

suffixOverrides:指定去除多余的后缀内容,如:suffixOverrides=",",去除trim标签内sql语句多余的后缀","。

prefixOverrides:指定去除多余的前缀内容

2.下面是一个往购物车表中插入数据的mybatis语句

<insert id="insert" parameterType="com.tortuousroad.groupon.cart.entity.Cart">
        insert into cart
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">
                id,
            </if>
            <if test="userId != null">
                user_id,
            </if>
            <if test="dealId != null">
                deal_id,
            </if>
            <if test="dealSkuId != null">
                deal_sku_id,
            </if>
            <if test="count != null">
                count,
            </if>
            <if test="createTime != null">
                create_time,
            </if>
            <if test="updateTime != null">
                update_time,
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">
                #{id,jdbcType=BIGINT},
            </if>
            <if test="userId != null">
                #{userId,jdbcType=BIGINT},
            </if>
            <if test="dealId != null">
                #{dealId,jdbcType=BIGINT},
            </if>
            <if test="dealSkuId != null">
                #{dealSkuId,jdbcType=BIGINT},
            </if>
            <if test="count != null">
                #{count,jdbcType=INTEGER},
            </if>
            <if test="createTime != null">
                #{createTime,jdbcType=TIMESTAMP},
            </if>
            <if test="updateTime != null">
                #{updateTime,jdbcType=TIMESTAMP},
            </if>
        </trim>
    </insert>
suffixOverrides=","

执行的sql语句也许是这样的:insert into cart (id,user_id,deal_id,) values(1,2,1,);显然是错误的

指定之后语句就会变成insert into cart (id,user_id,deal_id) values(1,2,1);这样就将“,”去掉了。

前缀也是一个道理这里就不说了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java 网络编程之 TCP 实现简单的聊天系统

    Java 网络编程之 TCP 实现简单的聊天系统

    这篇文章主要介绍了Java 网络编程之 TCP 实现简单的聊天系统,帮助大家更好的理解和学习Java 网络编程,感兴趣的朋友可以了解下
    2020-11-11
  • Java List移除相应元素的超简洁写法分享

    Java List移除相应元素的超简洁写法分享

    这篇文章主要介绍了Java List移除相应元素的超简洁写法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java容器类源码详解 Deque与ArrayDeque

    Java容器类源码详解 Deque与ArrayDeque

    这篇文章主要介绍了Java容器类源码详解 Deque与ArrayDeque,Deque 接口继承自 Queue接口,但 Deque 支持同时从两端添加或移除元素,因此又被成为双端队列。,需要的朋友可以参考下
    2019-06-06
  • Java concurrency之公平锁(一)_动力节点Java学院整理

    Java concurrency之公平锁(一)_动力节点Java学院整理

    这篇文章主要为大家详细介绍了Java concurrency之公平锁的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Java子类对象的实例化过程分析

    Java子类对象的实例化过程分析

    这篇文章主要介绍了Java子类对象的实例化过程,结合具体实例形式分析了java子类对象的实例化的步骤、原理、实现方法,需要的朋友可以参考下
    2019-09-09
  • java String 可变性的分析

    java String 可变性的分析

    这篇文章主要介绍了java String 可变性的分析的相关资料,通常大家都认为java String 是不可变的,这里分析下源码来说明它的可变性,需要的朋友可以参考下
    2017-03-03
  • Java正则之贪婪匹配、惰性匹配

    Java正则之贪婪匹配、惰性匹配

    这篇文章主要介绍了Java正则之贪婪匹配、惰性匹配的相关资料,需要的朋友可以参考下
    2015-03-03
  • java UDP通信客户端与服务器端实例分析

    java UDP通信客户端与服务器端实例分析

    这篇文章主要介绍了java UDP通信客户端与服务器端,结合实例形式分析了java基于UDP通信的客户端与服务器端具体实现技巧及相关操作注意事项,需要的朋友可以参考下
    2020-01-01
  • java foreach循环为什么不能赋值的讲解

    java foreach循环为什么不能赋值的讲解

    这篇文章主要介绍了java foreach循环为什么不能赋值的讲解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 浅谈将JNI库打包入jar文件

    浅谈将JNI库打包入jar文件

    这篇文章主要介绍了浅谈将JNI库打包入jar文件,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12

最新评论