此篇适合有一定的mybatis使用经验的人阅读.
一.批量更新
为了提升操作数据的效率,第一想到的是做批量操作,直接上批量更新代码:
<update id="updateBatchMembers" parameterType="list">
update crm_member
<trim prefix="set" suffixOverrides=",">
<trim prefix="dept_id =case" suffix="end,">
<foreach collection="list" item="i" index="index">
<if test="i.deptId!=null">
when id=#{i.id} then #{i.deptId}
</if>
</foreach>
</trim>
<trim prefix=" sys_user_id =case" suffix="end,">
<foreach collection="list" item="i" index="index">
<if test="i.sysUserId!=null">
when id=#{i.id} then #{i.sysUserId}
</if>
</foreach>
</trim> <trim prefix="public_area_id =case" suffix="end," >
<foreach collection="list" item="i" index="index">
<if test="i.publicAreaId!=null">
when id=#{i.id} then #{i.publicAreaId}
</if>
</foreach>
</trim>
</trim>
where
<foreach collection="list" separator="or" item="i" index="index" >
id=#{i.id}
</foreach>
</update>
生成的sql语句
update
crm_member
set
dept_id =case
when id=? then ?
when id=? then ?
when id=? then ?
when id=? then ?
end,
sys_user_id =case
when id=? then ?
when id=? then ?
when id=? then ?
when id=? then ?
end,
public_area_id =case
when id=? then ?
when id=? then ?
when id=? then ?
when id=? then ?
end
where
id=?
or id=?
25 or id=?
or id=?
27 or id=?
二.批量添加
批量添加在做大量数据插入到mysql时,效率相对单条遍历插入大大提高;
但是数据是基于数据库层面做的约束的话,在插入的数据中有一个数据有误,整个批量操作全部回滚;
适用场景:数据迁移时使用.
<insert id="batchInsertMember" parameterType="java.util.List">
insert into crm_member(
id,
name,
type,
phone,
link,
)
values
<foreach collection="list" item="item" index="index" separator=",">
(
#{item.id},
#{item.name},
#{item.type},
#{item.phone},
#{item.link}
)
</foreach>
</insert>
生成对应的sql
insert into
crm_member (
id,
name,
type,
phone,
link
)
values
(?,?,?,?,?),
(?,?,?,?,?),
(?,?,?,?,?),
(?,?,?,?,?)