hs_bj 2018-07-18 02:38 采纳率: 27.3%
浏览 1317
已采纳

ibatis批量修改,,,

ibatis批量修改,传入一个map,
String id;
List ids = new ArrayList();
List ls = new ArrayList();
map.put("id", id);
map.put("ids", ids);
map.put("ls", ls);

sql代码:

update dic_limit_value set

LIMIT_VALUE = #ls[].limitValue#,ERROR_LIMIT = #ls[].errorLimit#,EX_LIMIT = #ls[].exLimit#

where BTS_ID = #stid#

and LIMIT_ID in

#ls[].limitIDs#


    这样的写法是错的,请问应该怎么写
  • 写回答

4条回答 默认 最新

  • qq_41816755 2018-07-18 02:47
    关注

    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 into tb_active_code(code, create_user_id, create_time) values
    <!-- 该iterate将对应的对象的集合生成insert into批量插入时的多条记录 -->


    <![CDATA[<!--这里使用了括号,所以使用该方法防止ibatis转义时出错。 -->
    (#codes[].code#, #codes[].createUserId#, #codes[].createTime#)
    ]]>


    1
    2
    3
    4
    5
    6
    7
    8
    9

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

    update set
    p1 = ""<!-- 针对常量 -->
    WHERE

    #values[]#

    1
    2
    3
    4
    5
    6
    7
    8

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

    4.通过ibatis的提供的方法来实现update的批量更新(更新的列值不同):
    通过sqlMapClient的startTransaction()开启事务, startBatch()开始批操作, executeBatch()执行批操作, commitTransaction()
    提交事务,endTransaction()结束事务。通过这几个方法结合实现批量更新,具体操作如下:
    /**
    * @Description: 使用iBatis进行批量操作,并且使用事务
    * @param sqlMapClient
    * @param infos 要更新的数据集合
    * @param size 集合长度
    */

    public void updateBatch(SqlMapClient sqlMapClient, List 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(); 
                }  
       }  
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 已采纳回答 10月11日

悬赏问题

  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证