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
    不积跬步无以至千里
  • 相关阅读:
    P1082 同余方程
    P2678 跳石头
    P2827 蚯蚓
    P1351 联合权值
    P2822 组合数问题
    P3958 奶酪
    P2296 寻找道路
    P2661 信息传递
    平时问题总结
    平时总结
  • 原文地址:https://www.cnblogs.com/showme1942/p/7382754.html
Copyright © 2011-2022 走看看