Mybatis之动态SQL实现更新操作

动态SQL实现更新操作

在之前例子中,更新(Update)时需要传入所有参数,当某一参数为null时,会导致更新错误,如下图

注释掉某些参数:

未传参的结果为null了,显然不是我们想实现的

因此需要用到if set标签:

1、if+set标签

修改Mapper.xml文件:

	<!-- 修改用户信息 -->
	<update id="modify" parameterType="User">
		update smbms_user 
		<set>
			<if test="userCode != null">userCode=#{userCode},</if>
			<if test="userName != null">userName=#{userName},</if>
			<if test="userPassword != null">userPassword=#{userPassword},</if>
			<if test="gender != null">gender=#{gender},</if>
			<if test="userRole != null">userRole=#{userRole},</if>
			<if test="modifyBy != null">modifyBy=#{modifyBy},</if>
			<if test="modifyDate != null">modifyDate=#{modifyDate},</if>
			<if test="address != null">address=#{address},</if>
			<if test="phone != null">phone=#{phone},</if>
			<if test="birthday != null">birthday=#{birthday},</if>		
		</set>
		where id = #{id}
	</update>

结果如下

查询数据库发现未修改的数据保持不变,实现了我们所需的需求。

 

2、if trim标签

使用if+ trim标签对if set进行替换:

<!-- 修改用户信息 -->
	<update id="modify" parameterType="User">
		 update smbms_user 
			 <trim prefix="set" suffixOverrides="," suffix="where id = #{id}">
		 		<if test="userCode != null">userCode=#{userCode},</if>
				<if test="userName != null">userName=#{userName},</if>
				<if test="userPassword != null">userPassword=#{userPassword},</if>
				<if test="gender != null">gender=#{gender},</if>
				<if test="birthday != null">birthday=#{birthday},</if>
				<if test="phone != null">phone=#{phone},</if>
				<if test="address != null">address=#{address},</if>
				<if test="userRole != null">userRole=#{userRole},</if>
				<if test="modifyBy != null">modifyBy=#{modifyBy},</if>
				<if test="modifyDate != null">modifyDate=#{modifyDate},</if>
			 </trim>
	</update>

运行结果与if-set一致。

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

liyumo65

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

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

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

打赏作者

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

抵扣说明:

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

余额充值