您的位置:首页 > 其它

mybatis中批量插入以及更新

2017-06-15 17:23 337 查看
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('','','')

这样取出来的范围比较大,然后在拿数据与取出来的数据进行比较,相同说明表里存在,不同说明不存在。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: