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('','','')

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

  • 相关阅读:
    java中反射
    mysql 的锁机制和ACID
    名词记忆
    switch语法之PHP
    PHP代码批量加密
    windows 20003 扩展安装后不成功的原因
    apache配置虚拟目录
    移动web在ios和android下点击元素出现阴影问题
    同时屏蔽ios和android下点击元素时出现的阴影
    DES
  • 原文地址:https://www.cnblogs.com/warrior4236/p/7018980.html
Copyright © 2011-2022 走看看