mybatis

Posted 若梦plus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis相关的知识,希望对你有一定的参考价值。

mybatis update

使用场景:当使用update进行更新的时候,数据表难免会有些不被更新的字段,如create_time,这些字段只想保留第一次插入进表的值,在后续更新sql语句中,只想更新需要被更新的字段。

解决办法1:

<!--更新收货地址-->
  <update id="updateByShipping" parameterType="com.mall.pojo.Shipping">
    update mall_shipping
    set
    receiver_name = #{receiverName,jdbcType=VARCHAR},
    receiver_phone = #{receiverPhone,jdbcType=VARCHAR},
    receiver_mobile = #{receiverMobile,jdbcType=VARCHAR},
    receiver_province = #{receiverProvince,jdbcType=VARCHAR},
    receiver_city = #{receiverCity,jdbcType=VARCHAR},
    receiver_district = #{receiverDistrict,jdbcType=VARCHAR},
    receiver_address = #{receiverAddress,jdbcType=VARCHAR},
    receiver_zip = #{receiverZip,jdbcType=VARCHAR},
    <if test="createTime != null">
      create_time = #{createTime,jdbcType=TIMESTAMP},
    </if>
    update_time = now()
    where id = #{id,jdbcType=INTEGER}
    and user_id = #{userId,jdbcType=INTEGER}
  </update>

解决办法2(优化)

<update id="updateUser" parameterType="com.test.entity.User">
        update BS_USER
            <trim prefix="set" suffixOverrides=",">
                <if test="ACCOUNT != null">ACCOUNT=#{ACCOUNT},</if>
                <if test="NAME != null">NAME=#{NAME},</if>
                <if test="PROV != null">PROV=#{PROV},</if>
                <if test="FAILURE_TIME != null">FAILURE_TIME=#{FAILURE_TIME},</if>
            </trim>
        where USERID=#{USERID}
    </update>

这种方法是将set标签换成<trim prefix="set"><trim>

标签中的suffixOverrides=","是去掉最后一个if后面的逗号,防止在动态更新多个参数,使用多个if的时候,因为最后一个逗号出现问题。

以上是关于mybatis的主要内容,如果未能解决你的问题,请参考以下文章

SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper

mybatis动态sql片段与分页,排序,传参的使用

MyBatis动态SQL标签用法

MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段

mybatis动态sql之利用sql标签抽取可重用的sql片段

[mybatis]动态sql_sql_抽取可重用的sql片段