原始数据
更新语句
<update id="updateUserInfo">
<foreach collection="list" item="user" separator=";">
update t_user
<set>
<if test="user.userName != null">
username=#{user.username} ,
</if>
<if test="user.passWord != null">
password=#{user.passWord} ,
</if>
<if test="user.nickName != null">
nickname=concat(nickname,#{user.nickName},char_length(username)) ,
</if>
</set>
<trim prefix="where" >
char_length(username) > 0
</trim>
</foreach>
</update>
测试方法
public void testUpdateUserInfo(){
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> users = Arrays.asList(new User(1,"hi"),new User(2,"阿七"),new User(3 ,"老夏"),new User(4,"test"));
int result = userMapper.updateUserInfo(users);
System.out.println(result);
}
更新后的数据
修改更新语句
<update id="updateUserInfo">
<foreach collection="list" item="user" separator=";">
update t_user
<set>
<if test="user.userName != null">
username=#{user.username} ,
</if>
<if test="user.passWord != null">
password=#{user.passWord} ,
</if>
<if test="user.nickName != null">
nickname=concat(nickname,#{user.nickName},char_length(username)) ,
</if>
</set>
<trim prefix="where" >
char_length(username) > 0
<if test="user.uId != null">
and id=#{user.uId}
</if>
</trim>
</foreach>
</update>
重置数据
结果
这里的更新语句是多条,每次执行一条更新语句时都要扫描整张表,根据关联条件修改对应行