SSMday3——实现更新操作if+set和if+trim

实现更新操作

1.使用if+set元素实现根据用户id进行用户信息修改操作。
2.使用if+trim元素实现根据用户id进行用户信息修改操作。

if+set

我们分析之前的修改SQL语句

<update parameterType="com.bean.Users" id="update">
update n_users 
set
nickname = #{nickname},realname = #{realname},pwd = #{pwd},phone = #{phone},email = #{email},address = #{address},create_time = #{createTime},type = #{type},realid = #{realid}
where id = #{id} 
</update>
User user=new User();
user.setId(1);
user.setNickname("张三");
user.setRealname("张昌胜");
sqlSession=MyBatisUtil.createSqlSession();
count=sqlSession.getMapper(UserMapper.class).update(user);

当我们只对其中的nickname和realname进行修改时,只设置了nickname和realname这两个属性,即只对数据库中二个字段(nickname、realname)进行相应更新操作。(注:用户id为更新的where条件)

但运行后发现,除了设置的两个字段被更新外,其他字段也均被更新了,并且更新为NULL通过日志输出的MyBatis的SQL语句,我们找到了原因。如下所示:

update n_users 
set
nickname = 张三,realname = 张昌胜,pwd = NULL,phone =  NULL,email =  NULL,address =  NULL,create_time = NULL,type =  NULL,realid =  NULL
where id = 1 

通过日志中的SQL语句和参数,我们发现未被设置的参数也进行了set操作。这就需要使用动态SQL中的set元素来处理。

修改UserMapper.xml

<update parameterType="com.bean.Users" id="update">
update n_users 
<set>
	<if test="nickname !=null">nickname = #{nickname},</if>
	<if test="realname !=null">realname = #{realname},</if>
	<if test="pwd !=null">pwd = #{pwd},</if>
	<if test="phone !=null">phone = #{phone},</if>
	<if test="email !=null">email = #{email},</if>
	<if test="createTime!=null">create_time = #{createTime},</if>
	<if test="type !=null">type = #{type},</if>
	<if test="realid !=null">realid = #{realid}</if>
</set>
where id = #{id} </update>

set元素主要用于更新操作,它的功能和where元素差不多,是在包含的语句前输出一个set,若包含的语句是以逗号结束的,则会自动把逗号忽略掉,再配合if元素就可以动态地更新需要修改的字段。而不需要修改的字段,则可以不更新。

if+trim

也可以使用trim元素来替代set元素,实现与set一样的效果。

修改UserMapper.xml

<update parameterType="com.bean.Users" id="update">
update n_users 
<trim prefix="set" suffixOrrides="," suffix="where id=#{if}">
	<if test="nickname !=null">nickname = #{nickname},</if>
	<if test="realname !=null">realname = #{realname},</if>
	<if test="pwd !=null">pwd = #{pwd},</if>
	<if test="phone !=null">phone = #{phone},</if>
	<if test="email !=null">email = #{email},</if>
	<if test="createTime!=null">create_time = #{createTime},</if>
	<if test="type !=null">type = #{type},</if>
	<if test="realid !=null">realid = #{realid}</if>
</trim>
</update>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值