Mybatis对Oracle批量插入的配置

项目里使用了MyBatis做持久层,数据库是Oracle,用到了Batch Insert 功能,因为以前做的都是MySQL,也做过PostgreSQL数据库,批量插入的语句都相同,但是在Oracle上就不好使了。后来网上搜了下,大致的写法有两种:

  <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="false">
    insert into USER_CARE_SITE (USER_ID, CARE_SITE_ID)
    <foreach collection="list" item="item" index="index" separator="union all" > 
	  (select #{item.userId,jdbcType=INTEGER}, #{item.careSiteId,jdbcType=INTEGER} from dual)
    </foreach>
  </insert>

<insert id="batchInsert" parameterType="java.util.List">
     INSERT ALL
    <foreach collection="list" item="item"> 
	  INTO USER_CARE_SITE (USER_ID, CARE_SITE_ID)
      VALUES ( #{item.userId,jdbcType=INTEGER}, #{item.careSiteId,jdbcType=INTEGER} )
    </foreach>
    SELECT * FROM DUAL
  </insert>

但是我这边的控制台始终报ORA-00933: SQL 命令未正确结束,然后我就把语句直接拷贝到sqldeveloper里面执行,都能工作。然后比对自己的代码和网友的代码,几乎是一模一样的啊,但是MyBatis 始终通不过,所以我就在猜这个可能是MyBatis里面的错误。

然后就google到了网友 mybatis批量插入数据到oracle ,里面提到了 “原因竟是mybatis批量插入oracle时需要显式指定为 useGeneratedKeys="false" 不然报错~~~”。测试下,果然可以,但是其他网友的能不设这个属性都可以工作,是因为他们在 MyBatis 的配置文件里面(我的是mybatis-config.xml )要么没设这个属性值,因为默认值就是false, 要么就是将这个值设置为 false 了,而我的偏偏就将其设置为 true,悲哀。。。。

<!-- 允许 JDBC 支持生成的键。 需要适合的 驱动。 如果设置为 true 则这个设置强制 生成的键被使用, 尽管一些驱动拒绝兼 容但仍然有效(比如 Derby), 默认false -->  
        <setting name="useGeneratedKeys" value="false" />

不知道这个属性设置为 false 后,哪些功能会受到影响,这个我还没碰到。这次写出来就是为了方便大家在检索问题的时候多一个答案来源。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值