mybatis使用oracle批量插入
Posted 蜗牛的信仰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis使用oracle批量插入相关的知识,希望对你有一定的参考价值。
mysql的批量大家应该都知道,oracle和mysql还是有些不同的,如下:
<insert id="inserts" parameterType="com.qianxingniwo.model.DlyOnlinePayOrder" useGeneratedKeys="false" > insert into YYSC_PLAT.DLY_ONLINE_PAY_ORDER (ORDER_ID, TRANSACTION_ID, ORDER_TYPE, WX_APPID, PAY_ORDER_ID, PAY_TIME, REFUND_MONEY, PAY_STATE, SOURCE, SUB_MCH_ID, PLATE_NUM, CARD_NO, PAY_TYPE, PAY_MONEY, IDEN, WX_MCH_ID, REAL_PAY_MONEY, ID, ORDER_DATE, REFUND_DATE, ATTACH, CREATE_TIME, UPDATE_TIME) <foreach collection="list" item="item" index="index" open="(" close=")" separator="union all"> select #{item.orderId,jdbcType=NUMERIC}, #{item.transactionId,jdbcType=VARCHAR}, #{item.orderType,jdbcType=NUMERIC}, #{item.wxAppid,jdbcType=VARCHAR}, #{item.payOrderId,jdbcType=VARCHAR}, #{item.payTime,jdbcType=DATE}, #{item.refundMoney,jdbcType=DECIMAL}, #{item.payState,jdbcType=NUMERIC}, #{item.source,jdbcType=NUMERIC}, #{item.subMchId,jdbcType=VARCHAR}, #{item.plateNum,jdbcType=VARCHAR}, #{item.cardNo,jdbcType=VARCHAR}, #{item.payType,jdbcType=NUMERIC}, #{item.payMoney,jdbcType=DECIMAL}, #{item.iden,jdbcType=VARCHAR}, #{item.wxMchId,jdbcType=VARCHAR}, #{item.realPayMoney,jdbcType=DECIMAL}, #{item.id,jdbcType=VARCHAR}, #{item.orderDate,jdbcType=DATE}, #{item.refundDate,jdbcType=DATE}, #{item.attach,jdbcType=VARCHAR}, #{item.createTime,jdbcType=DATE}, #{item.updateTime,jdbcType=DATE} from dual </foreach> </insert>
运行通过。在Oracle的版本中,有几点需要注意的:
1.SQL中没有VALUES;
2.<foreach>标签中的(select ..... from dual);
3.<foreach>标签中的separator的属性为"UNION ALL",将查询合并结果集。
4.最重要的一点就是一定要在insert标签中加入useGeneratedKeys="false",如果不加则会报如下错误:
### Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束
说明:insert的主键,我先调用了序列,然后复制给对象的属性了,所以在insert的时候直接用#{} 取字段就可以了
原文链接:https://blog.csdn.net/qq_37630354/article/details/82792288
以上是关于mybatis使用oracle批量插入的主要内容,如果未能解决你的问题,请参考以下文章
mybatis怎样批量插入数据到oracle,就算id自动增长问题
mybatis foreach批量插入数据:Oracle与MySQL区别