ibatis批量新增和批量修改
公司业务要求,对新增和修改操作进行优化,能够进行批量新增和修改,框架为ibatis,查了很多资料,路线大致分为两类:
- 借助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,自己没有使用,最后选择的第二种方式。
- 在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属性、传值类型相关,这块多留意一下。