oracle mybatis 批量插入 自增id

实现方案一:

<!-- 使用sql 实现 -->
    <insert id="insertBatch" parameterType="java.util.List" useGeneratedKeys="false" >
        INSERT INTO WF_TASKTEMP_DEALSTAFF (DEAL_ID, TEMP_ID, STAFF_ID,DEAL_TYPE, STATUS)
        SELECT WF_TASKTEMP_DEALSTAFF$SEQ.NEXTVAL,a.* FROM (
        <foreach collection="list" item="item" separator="union all">
            SELECT
            #{item.tempId,jdbcType=VARCHAR},
            #{item.staffId,jdbcType=VARCHAR},
            #{item.dealType,jdbcType=VARCHAR},
            #{item.status,jdbcType=CHAR}
            FROM dual
        </foreach>
        ) a
    </insert>

实现方案二:

<!-- 使用存储过程实现 -->       
 <insert id="insertBatch1" parameterType="java.util.List">
            begin
            <foreach collection="list" item="item" index="index">
                insert into WF_TASKTEMP_DEALSTAFF
                (
                  DEAL_ID, TEMP_ID, STAFF_ID,DEAL_TYPE, STATUS
                )
                values(WF_TASKTEMP_DEALSTAFF$SEQ.nextval,
                    #{item.tempId,jdbcType=VARCHAR},
                    #{item.staffId,jdbcType=VARCHAR},
                    #{item.dealType,jdbcType=VARCHAR},
                    #{item.status,jdbcType=CHAR}
                );
            </foreach>
            end;
        </insert>

转载于:https://my.oschina.net/u/3847203/blog/2967375

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Oracle MyBatis批量插入可以通过以下步骤实现: 1. 在MyBatis的配置文件中配置批量插入的语句,例如: <insert id="batchInsert" parameterType="java.util.List"> INSERT INTO table_name (column1, column2, column3) VALUES <foreach collection="list" item="item" separator=","> (#{item.column1}, #{item.column2}, #{item.column3}) </foreach> </insert> 2. 在Java代码中调用批量插入的方法,例如: List<Table> list = new ArrayList<>(); // 添加数据到list中 SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH); TableMapper tableMapper = sqlSession.getMapper(TableMapper.class); tableMapper.batchInsert(list); sqlSession.commit(); sqlSession.close(); 其中,TableMapper是MyBatis的Mapper接口,batchInsert是批量插入的方法名。 3. 在Oracle数据库中查看插入结果,例如: SELECT COUNT(*) FROM table_name; 注意事项: 1. 批量插入的数据量不宜过大,否则可能会导致内存溢出或数据库连接超时等问题。 2. 在Oracle数据库中,批量插入的效率受到多个因素的影响,例如表空间大小、索引状态、并发度等。可以通过调整这些因素来提高批量插入的效率。 ### 回答2: 在使用Oracle MyBatis插入大量数据时,使用批量插入可以大大提高性能。批量插入是指一次性插入多条数据,而不是一条一条地插入。下面是使用Oracle MyBatis进行批量插入的步骤: 1. 定义Mapper XML文件 在Mapper XML文件中定义批量插入语句,如下所示: ``` <insert id="batchInsert" parameterType="java.util.List"> insert into table_name(col1, col2, col3) values <foreach collection="list" item="item" separator=","> (#{item.col1}, #{item.col2}, #{item.col3}) </foreach> </insert> ``` 其中,`list`是需要插入的数据列表,`item`是列表中的每一项。`separator`指定每一项之间的分隔符。 2. 编写Java代码 在Java代码中,调用Mapper的`batchInsert`方法,如下所示: ``` SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH); try { MyMapper mapper = sqlSession.getMapper(MyMapper.class); List<MyObject> list = new ArrayList<>(); // 添加需要插入的数据 mapper.batchInsert(list); sqlSession.commit(); } finally { sqlSession.close(); } ``` 在上述代码中,通过`SqlSession`对象打开批量执行器`ExecutorType.BATCH`,然后获取对应的Mapper对象并调用`batchInsert`方法,将需要插入的数据传入。最后调用`commit`方法提交事务。 需要注意的是,批量插入操作的数量一般都比较大,可能会占用较多的系统资源。因此,在使用批量插入时,需要综合考虑系统的性能和可靠性等方面的问题。 ### 回答3: OracleMyBatis都是在企业级应用开发中非常常用的技术,而批量插入也是经常会遇到的需求。那么如何在Oracle数据库中实现MyBatis批量插入呢? 首先,需要了解MyBatis批量插入的原理。MyBatis批量插入其实就是把多个SQL语句合并成一个SQL语句,然后通过JDBC的批量处理机制一次性执行。这样可以大大减少与数据库的交互次数,提高插入效率。 在Oracle中,我们可以利用JDBC的批量处理机制实现MyBatis批量插入。具体实现步骤如下: 1. 在mapper.xml文件中定义一个批量插入的SQL语句。例如: ```xml <insert id="batchInsert" parameterType="java.util.List"> insert into mytable(column1, column2, column3) values <foreach item="item" collection="list" separator=","> (#{item.column1}, #{item.column2}, #{item.column3}) </foreach> </insert> ``` 其中,#{item.column1}和#{item.column2}等都是实体类的属性。 2. 在Java代码中调用批量插入方法。例如: ```java SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH); try { MyMapper mapper = sqlSession.getMapper(MyMapper.class); List<MyEntity> entities = new ArrayList<>(); entities.add(new MyEntity(1, "aaa", 100)); entities.add(new MyEntity(2, "bbb", 200)); entities.add(new MyEntity(3, "ccc", 300)); mapper.batchInsert(entities); sqlSession.commit(); } finally { sqlSession.close(); } ``` 其中,MyEntity是实体类,包含column1、column2和column3属性。 3. 在Oracle中开启JDBC的批量处理模式。例如: ```java Connection conn = sqlSession.getConnection(); conn.setAutoCommit(false); Statement stmt = conn.createStatement(); stmt.addBatch("insert into mytable(column1, column2, column3) values(1, 'aaa', 100)"); stmt.addBatch("insert into mytable(column1, column2, column3) values(2, 'bbb', 200)"); stmt.addBatch("insert into mytable(column1, column2, column3) values(3, 'ccc', 300)"); int[] results = stmt.executeBatch(); conn.commit(); ``` 通过以上三个步骤,就可以在Oracle中实现MyBatis批量插入了。需要注意的是,在第三步中需要使用stmt.addBatch()方法添加SQL语句到批量中,然后调用stmt.executeBatch()方法一次性执行。通过这种方式,可以大大提高插入效率,同时减少与数据库的交互次数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值