oracle mybatis获取序列值重复以及批量插入

背景

oracle批量插入,需要循环获取序列值作为id,并且批量插入数据。

1、循环获取序列值重复问题

标签中使用useCache="false"  flushCache="true",即可不使用mybatis的缓存,每次都能获取新值

<select id="selectOaPushSelfGroupSeq" resultType="string" useCache="false" flushCache="true">
   SELECT GROUP_SEQ.nextval from dual
</select>

2、批量插入

useGeneratedKeys="false",foreach标签不要使用分隔符

<insert id="addBatchGroupInfo" parameterType="java.util.List" useGeneratedKeys="false">
		INSERT ALL
		<foreach collection="list" item="pushInfo" index="index" >
		INTO SELF_GROUP
		(seq_id,group_id,group_name,oa_file_name,city_code,type,create_time,op_login_no,flow_id)
		VALUES
				(
				#{pushInfo.seqId},
				#{pushInfo.groupId},
				#{pushInfo.groupName},
				#{pushInfo.oaFileName},
				#{pushInfo.cityCode},
				#{pushInfo.type},
				#{pushInfo.createTime},
				#{pushInfo.opLoginNo},
				#{pushInfo.flowId}
				)
		</foreach>
		SELECT 1 FROM DUAL
	</insert>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值