zoukankan      html  css  js  c++  java
  • 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('','','')

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

  • 相关阅读:
    Overloaded的方法是否可以改变返回值的类型
    parseXXX的用法
    java的类型转换问题。int a = 123456;short b = (short)a;System.out.println(b);为什么结果是-7616?
    UVA 10405 Longest Common Subsequence(简单DP)
    POJ 1001 Exponentiation(大数处理)
    POJ 2318 TOYS(计算几何)(二分)
    POJ 1265 Area (计算几何)(Pick定理)
    POJ 3371 Flesch Reading Ease (模拟题)
    POJ 3687 Labeling Balls(拓扑序列)
    POJ 1094 Sorting It All Out(拓扑序列)
  • 原文地址:https://www.cnblogs.com/warrior4236/p/7018980.html
Copyright © 2011-2022 走看看