ibatis批量新增和批量修改

公司业务要求,对新增和修改操作进行优化,能够进行批量新增和修改,框架为ibatis,查了很多资料,路线大致分为两类:

  1. 借助SqlMapClient:
    1 SqlMapClient smc = this.getSqlMapClient();
    2 smc.startBatch();//评论处理开始
    3 for(Test test : list){                        
    4   this.getSqlMapClientTemplate().update("XXX.XXXX", map);
    5             }
    6 smc.executeBatch();//批量处理结束
    1 SqlMapClient smc = this.getSqlMapClient();
    2 smc.startBatch();//批量处理开始
    3 for(Test testmei : list){                        
    4   this.getSqlMapClientTemplate().update("XXX.XXXX", map);
    5             }
    6 smc.executeBatch();//批量处理结束

    在DaoImpl类中继承SqlMapClientDaoSupport,自己没有使用,最后选择的第二种方式。

  2. 在ibatis文件中,使用<iterate>标签,新增操作:
     1 <insert id="addImeiBatch" parameterClass="java.util.List">
     2         <![CDATA[
     3             insert into Test(a,a_id,create_time,b_id) value
     4         ]]>
     5         <iterate conjunction=",">
     6         <![CDATA[
     7             (#list[].a#, #list[].aId#, #list[].createTime#, #list[].bId#)
     8         ]]>
     9         </iterate>
    10 </insert>

    修改:

     1 <update id="updateImeiBatch" parameterClass="java.util.HashMap">
     2         <![CDATA[
     3         update Test set create_time = now(),isNotValid = 1
     4         where b_id = #bId# 
     5         ]]>
     6         <isNotNull property="List" prepend="AND"> a in 
     7         <iterate open="(" close=")" conjunction="," property="List">
     8             <![CDATA[
     9             #List[].imei#
    10             ]]>
    11         </iterate>
    12         </isNotNull>
    13 </update>

    值得注意的是批量处理,传值方式均为List集合,可以参考http://blog.csdn.net/bruce128/article/details/22098795。报错问题多与property属性、传值类型相关,这块多留意一下。

posted @ 2017-07-25 15:58  火星移民专家  阅读(8185)  评论(0编辑  收藏  举报