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

原文地址:https://www.cnblogs.com/longyao/p/11956107.html

时间: 2024-10-08 23:25:45

mybatis使用oracle批量插入的相关文章

mybatis支持oracle批量插入

问题:mysql使用mybatis批量插入时,通过foreach标签,将每条记录按照逗号","连接即可. 但是,oracle不支持. oracle支持如下写法: <insert id="insertStudents"> INSERT INTO Student ( id, name, age, sex ) <foreach collection="stuList" item="item" index="

mybatis oracle批量插入

<insert id="insertbatchinfotoemploees" parameterType="java.util.List"> insert into INFOTOEMPLOEE select INFO_EMPLOEES.NEXTVAL,A.* from( <!--INFO_EMPLOEES为自增序列--> <foreach collection="list" item="item"

Mybatis+Oracle --批量插入

Oracle自增长ID: 参考博客:Oracle数据库创建表ID字段的自动递增 mybatis语句 参考博客:点评 ibatis+oracle 批量插入的三种方法. 参考第三种 参考博客:mybatis中批量插入的两种方式(高效插入) Oracle自增长ID,如下: 序列: CREATE SEQUENCE "ENERGY"."ROLE_OBJECT_SEQ" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCRE

MyBatis在Oracle中插入数据并返回主键的问题解决

引言:  在MyBatis中,希望在Oracle中插入数据之时,同时返回主键值,而非插入的条数... 环境:MyBatis 3.2 , Oracle, Spring 3.2   SQL Snippet in XML Configuration: <insert id="insertSelective" parameterType="com.jxxx.p2pp.model.UUserInfo"> <selectKey resultType="

mybatis Oracle 批量插入,批量更新

传入的参数只要是list类型的参数就行了..............1.批量插入 <insert id="insertBatch" parameterType="java.util.List"> INSERT INTO T_CITY_INDEX( id,city_code ) select SEQ_CITY_INDEX.NEXTVAL,cd.* from( <foreach collection="list" item=&quo

Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名

Oracle数据库,用mybatic批量插入数据: <insert id="saveBatch" parameterType="io.renren.entity.NodeDataEntity" databaseId="oracle"> insert into "NODE_DATA" ( "NODE_ID", "DATA_TIME", "DATA_VALUE"

Oracle批量插入数据

学习了:http://blog.csdn.net/chenleixing/article/details/45165761/ 膜拜一下,引用原文: 那么有没有其他方法呢??答案是有的,也许熟悉oracle数据库的可能知道从oracle9i版本以后,可以使用一种方法即:"INSERT ALL INTO a表 VALUES(各个值) INTO a表 VALUES (其它值) INTO a表 VALUES(其它值) ....再跟一个SELECT 语句".后边跟的SELECT 语句我们可以从虚

Oracle批量插入有日期类型数据

例如现在有张表 id(number) startTime(date) name(varchar2) 1 2017-08-13  zhangsan 2 2017-08-14  zhangsan 需要批量插入name为zhangsan,日期以天递增,一个月的数据 1 insert into t(id,date,name) 2 select level,trunc(current_timestamp)+level,'zhangsan' 3 from dual 4 connect by level<=

mybatis父子表批量插入

<!--父子表批量插入 --> <insert id="insertBatch" parameterType="com.niwopay.dto.benifit.JFOrderVipDTO"> begin insert into TB_JF_ORDER <trim prefix="(" suffix=")" suffixOverrides="," > <if test