一、背景
在开发过程中,我们经常会对某个数据库表进行批量增删改的操作,sql批量的好处在于它可以避免程序和数据库建立多次连接,减少对数据库的访问次数,减轻数据的库压力,同时也会提高项目的性能。
二、批量添加
- XML方式
//mapper层
void addBatch(List<Emp> list);
//XML层
<!-- 批量添加 -->
<insert id="addBatch" parameterType="list">
insert into emp values
<foreach collection="list" item="s" separator=",">
(#{s.ename},#{s.sex},#{s.age},#{s.phone},#{s.jointime},#{s.deptid})
</foreach>
</insert>
- Mapper注解
@Insert("<script>" +
"INSERT INTO rc_fcrisk (id,create_date,tenant_id) "+
"values " +
"<foreach collection='fc' item='fcRisk' index='index' separator=','>" +
"(#{fcRisk.id},#{fcRisk.createDate},#{fcRisk.tenantId})"+
"</foreach>" +
"</script>")
void addBatch(@Param("fc") List<FcRisk> fc);
三、批量删除
- XML方式
<delete id="batchDelete">
delete from user where id in
<foreach collection="list" item="ids" separator="," open="(" close=")">
#{ids}
</foreach>
</delete>
- Mapper注解
@Delete("<script>"
+"delete from rc_fcrisk where fc_id in "
+ "<foreach collection='list' index='index' item='item' open='(' separator=',' close=')'>"
+ " #{item} "
+ "</foreach>"
+ "</script>")
void batchDelete(List<String> fc);
四、批量修改
<!-- 批量修改 -->
<update id="batchUpdate">
<foreach collection="list" item="user" separator=";" open="" close="">
update user
<set >
<trim suffixOverrides=",">
<if test="user.name != null" >
name= #{user.name},
</if>
<if test="user.age != null" >
age= #{user.age},
</if>
<if test="user.password!= null" >
password= #{user.password},
</if>
<if test="user.hobby}!= null" >
hobby= #{user.hobby}},
</if>
</trim>
</set>
where id= #{user.id}
</foreach>
</update>
注:
批量修改值得注意的地方是在配置文件中需要在数据库链接地址后面加上&allowMultiQueries=true 否则运行报错