批量插入,传入的是一个List对象的集合,因此在mapper文件中需要用循环的方式进行操作,具体格式如下:
<insert id="insertBatch" parameterType="java.utils.List">
insert into tablename (xxx,xxx,xxx)
values
/*collection的属性值为接口中对应的参数名称
(#{item.xxx},#{item.xxx},#{item.xxx}
通过属性的方式取得对应的值,注意小括号的使用
*/
<foreach collection="listxxx" item="item" separator=",">
(#{item.xxx},#{item.xxx},#{item.xxx})
</foreach>
</insert>
mapper文件对应的接口形式如下:
public void insertBatch(@Param("listxxx") List<xxx> listxxx);
(1)使用循环update形式【这种方式需要特别注意,需要在数据库连接字符串中增加allowMultiQueries=true,不然会报异常】
<update id="batchUpdate" parameterType="java.util.List">
<foreach collection="list" index="index" item="item" separator=";">
update t_demo_user set
<if test="item.userName!=null">
user_name=#{item.userName},
</if>
<if test="item.gender!=null">
gender=#{item.gender}
</if>
where user_id=#{item.userId}
</foreach>
</update>
(2)使用case形式
<update id="batchUpdate" parameterType="java.util.List">
UPDATE t_demo_user
<trim prefix="set" suffixOverrides=",">
<trim prefix="user_name= case" suffix="end,">
<foreach collection="list" item="item" index="index">
<if test="item.userName !=null">
when user_id=#{item.userId} then #{item.userName}
</if>
</foreach>
</trim>
<trim prefix="gender= case" suffix="end,">
<foreach collection="list" item="item" index="index">
<if test="item.gender !=null">
when user_id=#{item.userId} then #{item.gender}
</if>
</foreach>
</trim>
</trim>
where user_id in
<foreach collection="list" item="item" index="index" separator="," open="(" close=")">
#{item.userId}
</foreach>
</update>
动力节点在线课程涵盖零基础入门,高级进阶,在职提升三大主力内容,覆盖Java从入门到就业提升的全体系学习内容。全部Java视频教程免费观看,相关学习资料免费下载!对于火爆技术,每周一定时更新!如果想了解更多相关技术,可以到动力节点在线免费观看MyBatis视频教程学习哦!
提枪策马乘胜追击04-21 20:01
代码小兵87207-15 12:10
杨晶珍05-11 14:54
杨晶珍05-12 17:30