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

 

转载于:https://www.cnblogs.com/showme1942/p/7382754.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值