Mybatis(五 2)动态SQL

二、<set> 标签  用于增删改

改 直接写法:

<update id = 'update'>
update flower set name=#{name}, production=#{production} where id = #{id}
</update>

对应Java测试代码:

Flower  f=new Flower();
f.setName("bjsxt");
f.setId(9);
FlowerMapper mapper = sqlSession.getMapper(FlowerMapper.class);
mapper.update(f)

问题一:输入的对象f中的production属性为空,导致sql执行失败

改进:

<!--Set 会自动增加set关键字,并且去除最后一个逗号-->
    <update id="update">
        UPDATE   flower
        <set>
            <if test="name!=null and  name!=''">
                name=#{name},
            </if>

            <if test="production!=null and production!=''">
                production=#{production},
            </if>

        </set>
         where id=#{id}

    </update>

执行后的日志输出:并没有拼接production

对应Java测试代码:

Flower  f=new Flower();
f.setId(9);
FlowerMapper mapper = sqlSession.getMapper(FlowerMapper.class);
mapper.update(f)

问题二:输入的对象f中的name和production属性均为空,执行改进后的代码,日志输出为:

 报错了,因为此时只有where条件却没有set修改的属性,导致set关键没有被添加。 

可以在<set>标签内添加id = #{id}这个特殊的set执行语句防止执行错误 

<!--Set 会自动增加set关键字,并且去除最后一个逗号-->
    <update id="update">
        UPDATE   flower
        <set>
            <if test="name!=null and  name!=''">
                name=#{name},
            </if>

            <if test="production!=null and production!=''">
                production=#{production},
            </if>
            id=#{id}
        </set>
         where id=#{id}

    </update>

trim标签

可以通过trim添加前缀实现set和select的功能

<!--
       trim:
          prefix:添加前缀
          prefixOverrides:去除前缀
          suffix:添加后缀
          suffixOverrides:去除后缀
    -->
    <update id="update2">

        UPDATE   flower
            <!--添加前缀set 去掉后缀的逗号,不仅可以添加set这个前缀-->
          <trim prefix="set" suffixOverrides=",">

                <if test="name!=null and  name!=''">
                    name=#{name},
                </if>

                <if test="production!=null and production!=''">
                    production=#{production}
                </if>
          </trim>

        where id=#{id}

    </update>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Meikesibondwell

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

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

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

打赏作者

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

抵扣说明:

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

余额充值