Mybatis对Oracle批量插入的配置
2016-09-09 21:39
477 查看
项目里使用了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>
但是我这边的控制台始终报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 后,哪些功能会受到影响,这个我还没碰到。这次写出来就是为了方便大家在检索问题的时候多一个答案来源。
<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 后,哪些功能会受到影响,这个我还没碰到。这次写出来就是为了方便大家在检索问题的时候多一个答案来源。
相关文章推荐
- mybatis、oracle批量插入配置
- mybatis+oracle批量插入配置
- mybatis配置oracle批量插入
- Mybatis+Oracle批量插入与更新的配置文件
- mybatis、oracle批量插入配置
- Mybatis 批量插入带oracle序列 例子
- oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert
- Mybatis 批量插入带oracle序列例子+ORA-02287: 此处不允许序号
- mybatis如何实现批量更新和插入新增实例详解(附SQL以及mapper配置)
- oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert
- mybatis-oracle批量插入数据的简单学习
- mybatis实现oracle批量插入,带序列(记录一下)
- mybatis+oracle批量插入
- mybatis支持oracle批量插入
- Mybatis结合Oracle的foreach insert批量插入报错!
- SpringMVC+mybatis+oracle 批量插入
- spring mybatis组合下对oracle的批量插入
- mybatis 中配置 批量insert mysql,oracle
- Mybatis中实现oracle的批量插入、更新
- Mybatis中实现oracle的批量插入、更新