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);这样就将“,”去掉了。
前缀也是一个道理这里就不说了。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。