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
MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段