1、普通List直接传入
<update id="updateList" >
<foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";">
update T_USER
<set>
<if test="item.name !=null">
NAME = #{item.name},
</if>
<if test="item.sex !=null">
SEX = #{item.sex},
</if>
<if test="item.age !=null">
AGE = #{item.age},
</if>
<if test="item.className !=''">
CLASS_NAME = #{item.className},
</if>
</set>
where ID = #{item.id}
</foreach>
</update>
2、使用case when
<update id="updateList" >
UPDATE T_USER
<trim prefix="set" suffixOverrides=",">
<trim prefix="NAME = CASE" suffix="end,">
<foreach collection="list" item="item" index="index">
<if test="item.name != null">
WHEN ID = #{item.id} THEN #{item.name}
</if>
</foreach>
</trim>
<trim prefix="SEX = CASE" suffix="end,">
<foreach collection="list" item="item" index="index">
<if test="item.sex != null">
WHEN ID = #{item.id} THEN #{item.sex}
</if>
</foreach>
</trim>
<trim prefix="AGE = CASE" suffix="end,">
<foreach collection="list" item="item" index="index">
<if test="item.age != null">
WHEN ID = #{item.id} THEN #{item.age}
</if>
</foreach>
</trim>
<trim prefix="CLASS_NAME = CASE" suffix="end,">
<foreach collection="list" item="item" index="index">
<if test="item.className != null">
WHEN ID = #{item.id} THEN #{item.className}
</if>
</foreach>
</trim>
</trim>
where
<foreach collection="list" separator="or" item="item" index="index" >
ID = #{item.id}
</foreach>
</update>
注意:当list数量过大时可能会栈溢出,需要将list分割