如果MyBatis需要进行批量插入,推荐使用 ExecutorType.BATCH 的插入方式,如果非要使用 的插入的话,需要将每次插入的记录控制在 20~50 左右。
Oracle数据库的问题就比较大了,而且至今潘老师也没找到一个比较完美的解决方案,此次写这篇博客也正是由于Oracle数据库saveBatch效率贼低引起的,先看下图,批量插入一万条数据(MyBatis-Plus的saveBatch默认一次1000条,1w条会分10次,当然你也可以设置Batch Size),耗时竟然达到10s多,简直不能忍啊,堪比龟速! 于是就开始...
方法一: Mybatis本身只支持逐条插入,比较笨的方法,就是遍历一个List,循环中逐条插入,比如下面这段代码 for(Data d : ListData) { dataMapper.insertSelective(d); } 1. 2. 3. 这样做的后果就是效率严重低下,因为每次循环都要向数据库提交一次,数据少的时候看不出来,但是如果上千条,花费的时间就相当多了 ...
datalist中map的顺序需要与lineColumn对应 <insert id="insertIndi" parameterType="java.util.HashMap" useGeneratedKeys="false"> <![CDATA[ INSERT INTO TABLEA(${lineColumn}) select results.* from( ]]> <foreach collection="datalist" item="item" index="index" separator="union all" > (select <...
datalist中map的顺序需要与lineColumn对应 <insert id="insertIndi" parameterType="java.util.HashMap" useGeneratedKeys="false"> <![CDATA[ INSERT INTO TABLEA(${lineColumn}) select results.* from( ]]> <foreach collection="datalist" item="item" index="index" separator="union all" > ...
/** *使用MP所提供批量插入API处理 *39.586seconds. */ @Test public void testMpBatchInsert() { long startTime = System.currentTimeMillis(); service.insertBatch(entities); long endTime = System.currentTimeMillis(); System.out.println(Float.toString((endTime - startTime) / 1000F) + " second...
指定长度"进行切分,返回新的List<List<类型>>集合。可以看出,50000条数据,不到2秒钟就插入完成,大大提高了效率。这里分片的目的有两个:1、批量插入,拼接的SQL语句过长,oracle会有限制;2、分片后采用stream多线程并行插入可以提高效率;此外,不管是mysql还是oracle数据库,都可以使用分片进行插入。
使用 MyBatis 和 Oracle 进行大批量数据的查询和插入操作时,可以考虑以下优化措施:1. 批量查询优化:...
insert all into tablename() values() into tablename() values() ---这个是Oracle批量插入形式 下面记录: mybaits 批量插入数据的样式, 代码语言:javascript 复制 <insert id="insertclobtest2"parameterType="com.inspur.tax.sjaqgl.sjflfjgl.data.ClobEntity">INSERTALL<foreach collection="list"item="item"i...