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 }
正确的写法
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>
不积跬步无以至千里