zoukankan      html  css  js  c++  java
  • Mybatis + Oracle 批量insert的问题

    这个问题真的太坑了 之前用ibatis+sql server 的foreach 很容易就写出来批量insert数据,但是测试后报错:SQL结束格式错误

    现在换到银行工作,数据库也换成Oracle了 特此记一下

    mybatis+oracle的批量insert方法

    oracle是通过一张dual虚拟表来帮助insert的,我的参数是Map<String,Object>

    TestCase:

     1 @Test
     2     public void saveAlInfoList(){
     3         String batNo = "20170817";
     4         List<AlInfo> list = new ArrayList<>();
     5         AlInfo al = new AlInfo();
     6         al.setAjlx("民事判决书");al.setSjnf("2009");
     7         al.setBt("原告李四与被告张三买卖合同纠纷一案");
     8         al.setDsrlx("被告");
     9         AlInfo al2 = new AlInfo();
    10         al2.setAjlx("民事判决书");al2.setSjnf("2019");
    11         al2.setBt("原告李四与被告张三买卖合同纠纷一案");
    12         al2.setDsrlx("被告");
    13         list.add(al);list.add(al2);
    14         Map<String,Object> map = new HashMap<String,Object>();
    15         map.put("batNo",batNo);
    16         map.put("list",list);
    17         pyMapper.saveAlInfoList(map);
    18 
    19     }
    View Code

    正确的写法

     1 <insert id="saveSxInfoList" parameterType="java.util.Map">
     2         INSERT INTO TABLE_Al (BATNO,RECORDID,BT,LARQ,FBRQ)
     3         <foreach collection="list" item="item" separator="union all" >
     4             (
     5             SELECT
     6             #{batNo,jdbcType=VARCHAR},
     7             #{item.recordId,jdbcType=VARCHAR},
     8             #{item.bt,jdbcType=VARCHAR},
     9             #{item.larq,jdbcType=VARCHAR},
    10             #{item.fbrq,jdbcType=VARCHAR}
    11             FROM DUAL
    12             )
    13         </foreach>
    14 </insert>
    View Code
    不积跬步无以至千里
  • 相关阅读:
    Android(java)学习笔记6:实现Runnable接口创建线程 和 使用Callable和Future创建线程
    Android(java)学习笔记5:线程的生命周期
    Android(java)学习笔记4:线程的控制
    Android(java)学习笔记3:线程的优先级
    Android(java)学习笔记2:继承Thread类创建线程类
    凑算式
    三洋献瑞
    三洋献瑞
    三洋献瑞
    移动距离
  • 原文地址:https://www.cnblogs.com/showme1942/p/7382754.html
Copyright © 2011-2022 走看看