实现更新操作
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>