天天看点

ibatis结合Oracle的iterate insert批量插入

<insert id="batchInsert" parameterClass="java.util.List">
  INSERT INTO SYS_ROLE_MENU(
  ROLE_ID,  
  MENU_ID  
    )
  SELECT A.*
  FROM (
    <iterate  conjunction ="union all" >
    SELECT
      #list[].key# as ROLE_ID,
      #list[].value# as MENU_ID
    from dual
    </iterate >
    ) A
  </insert>      
/**
    * 批量插入功能
    */
     @SuppressWarnings("unchecked")
     public void updateBatch(final List<ListKeyValue> list, String roleId) {
       SqlMapClient sqlMapClientTemplate = baseDao.getSqlMapClient();
       try {
         sqlMapClientTemplate.startTransaction();//开启事务
         /**事务todo start***/
         /**先执行删除所有**/
         Map<String,Object> deleteParamMap=new HashMap<>();
         deleteParamMap.put("id",roleId.split(","));
         sqlMapClientTemplate.delete("delete",deleteParamMap);
         sqlMapClientTemplate.insert("batchInsert",list);
         /**事务todo end***/
         sqlMapClientTemplate.commitTransaction();//提交事务
       } catch (SQLException e) {
         e.printStackTrace();
       }finally {
         try {
           sqlMapClientTemplate.endTransaction();//事务完成
         } catch (SQLException e) {
           try {
             sqlMapClientTemplate.getCurrentConnection().rollback();  //事务回滚
           } catch (SQLException e1) {
             e1.printStackTrace();
           }
           e.printStackTrace();
         }
       }

     }