ibatis批量操作的实现

  1. iterate标签: 该标签是针对对象的一个属性集合(或者数组)进行操作的,对应表中相应列的多个值;它有如下属性。
    property–对应对象的属性名
    prepend–对应迭代值的前缀
    open– 对应值遍历前的初始符号, 如: prepend=”IN “, open=”(” ,则生成的语句是”IN (“
    close– 遍历后值的结束符,即值被包装在open和close中
    conjunction–属性值直接的分隔符,如: conjunction=”,”则结合上面的设置语句最终如下:
    IN ( v1, v2,…)
    removeFirstPrepend–移除第一个追加字符,如prepend=”OR”, 则第一个标签就是OR,则不符合SQL语法,所以将其设置为
    true 防止语法错误。
  2. 使用iterate进行批量插入:
    <insert id="" parameterClass="java.util.List">
          insert into tb_active_code(code, create_user_id, create_time) values 
          <!-- 该iterate将对应的对象的集合生成insert into批量插入时的多条记录 -->
         <iterate property="codes" conjunction=",">  
               <![CDATA[<!--这里使用了括号,所以使用该方法防止ibatis转义时出错。 -->
                        (#codes[].code#, #codes[].createUserId#, #codes[].createTime#) 
                ]]>  
        </iterate> 
    </insert>

批量改、删:
3. 更新只能针对不同的记录更新的列是同一个值,如下:

    <update id=""   parameterClass="java.util.List">
              update set
                   p1 = ""<!-- 针对常量 -->
                   WHERE 
                   <iterate  property="values"  prepend="IN "   open="("  close=")"  conjunction=",">
                           #values[]#
                   </iterate>
     </update>

删除和更新是一样的,通过使用IN选项来实现对应列的删除。

4.通过ibatis的提供的方法来实现update的批量更新(更新的列值不同):
通过sqlMapClient的startTransaction()开启事务, startBatch()开始批操作, executeBatch()执行批操作, commitTransaction()
提交事务,endTransaction()结束事务。通过这几个方法结合实现批量更新,具体操作如下:

      /** 
     * @Description: 使用iBatis进行批量操作,并且使用事务
     * @param sqlMapClient 
     * @param infos 要更新的数据集合 
     * @param size 集合长度 
    */  
    public void updateBatch(SqlMapClient sqlMapClient, List<TicketSellInfo> infos, int size)   
     {  
          try{  
               // 事务开始  
               sqlMapClient.startTransaction();  

               // 批量操作开始  
               sqlMapClient.startBatch();  
               for (int i = 0; i < size; i++) {  
                     // 保存数据  
                       sqlMapClient.update("BUS_TICKET_SELL.updateVerifyStatus", infos.get(i));  
               }    
               // 批量操作执行  
               sqlMapClient.executeBatch();  

               // 事务提交   
               sqlMapClient.commitTransaction();  
         } catch (Exception e) {  
               e.printStackTrace();
         } finally {  
               try {  
                   // 事务结束  
                   sqlMapClient.endTransaction();  
                } 
                catch (SQLException e)
                { 
                    e.printStackTrace(); 
                }  
       }  
   }

在sqlmap中就使用一个普通的updata的更新语句即可。通过这种方式我们就可以实现针对不同记录进行批量更新了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值