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

 

posted @ 2017-08-17 17:00  showme1942  阅读(247)  评论(0编辑  收藏  举报