mybatis中批量插入以及更新

1:批量插入

批量插入就是在预编译的时候,将代码进行拼接,然后在数据库执行

 1 <insert id="batchInsert" parameterType="java.util.List">
 2         insert into table_name
 3         (column1,column2,column3,column4,column5,column6,column7,
 4         column8,column9,column10,column11,column12)
 5         values
 6         <foreach collection="list" item="item" index="index"
 7             separator=",">
 8             (#{item.column1},#{item.column2},#{item.column3},#{item.column4},
 9             #{item.column5},#{item.column6},#{item.column7},#{item.column8},#{item.column9},
10             #{item.column10},#{item.column11},#{item.column12} )
11         </foreach>
12     </insert>

以上代码在数据库拼接后的效果是:

insert into table_name (a,b,c) values (a_value,b_value,c_value),(a_value2,b_value2,c_value2),.....

2:批量更新

<update id="batchUpdate" parameterType="java.util.List">
		<foreach close="" collection="list" index="index" item="item"
			open="" separator=";">
			update table_name
			<set>
				<if test="item.column1!= null">column1= #{item.column1,jdbcType=VARCHAR},</if>
				<if test="item.column2!= null">column2= #{item.column2,jdbcType=VARCHAR},</if>
				<if test="item.column3!= null">column3= #{item.column3,jdbcType=VARCHAR},</if>
				<if test="item.column4!= null">
					column4= #{item.column4,jdbcType=VARCHAR},
				</if>
			</set>
			where column5=#{item.column5,jdbcType=VARCHAR} 
		</foreach>
	</update>

 更新代码也是做了一个拼接,在数据库预编译后的效果是:

update table_name set a=a_value,b=b_value where c=c_value;update table_name set a=a_value2,b=b_value2 where c=c_value2;....

3:对于数据量比较大,而且不能断定需要insert或者update时,我们可以先将表中包含这些字段值得数据取出来,然后进行比较,判断

表中是否存在,然后归类为updateList和insertList,然后在分批次处理

 1 <select id="queryIsExist" parameterType="java.util.List"
 2         resultType="ExistDepositDto">
 3         select column1 as column1 , column2 as column2   from
 4         table_name where column3 in
 5         <foreach collection="list" index="index" item="item" open="("
 6             separator="," close=")">#{item.column3}</foreach>
 7         and column4 in
 8         <foreach collection="list" index="index" item="item" open="("
 9             separator="," close=")">#{item.column4 }
10             </foreach>
11          
12     </select>            

这里的如此是list,list里面是javabean对象,其实可以使用set结合的方式,这样可以去重,但是没有找到

正确的拼接方式,就使用list<Object>作为入参的方式,

在数据库中预编译后的效果是:

select column1, column2,column3 from table_name where

column1 in ('','','') and column2 in('','','') and column3 in('','','')

这样取出来的范围比较大,然后在拿数据与取出来的数据进行比较,相同说明表里存在,不同说明不存在。

原文地址:https://www.cnblogs.com/warrior4236/p/7018980.html