Mybatis批插入效率过低,求指导

qq_32169845 2018-01-12 10:33:30
本人spring+Mybatis框架,批插入几千条数据要好几分钟,求大神指导如何高效率插入,不知道Mybatis如何做到1000条插入一次,分批插入。
...全文
1132 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cc_Davis_cC 2018-01-22
  • 打赏
  • 举报
回复 2
用jdbc+多线程来操作,启动多个线程,然后获取DB连接的时候,可以使用连接池,我之前做过一个类似的问题,效果很明显。
Inhibitory 2018-01-22
  • 打赏
  • 举报
回复
还可以使用事务,每个事务出入 1000 条,很快的。
沁海棠 2018-01-17
  • 打赏
  • 举报
回复
试试用二楼的方法,或者配置一下批量操作的执行器 <bean class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactoryBean"></constructor-arg> <constructor-arg name="executorType" value="BATCH"></constructor-arg> </bean> 直接注入,这样批量操作能快一点
kampoo 2018-01-15
  • 打赏
  • 举报
回复
1000条即使采用逐条插入,花几分钟也很不正常,确认一下: 1. 这个表有多少个字段,是不是字段过多或者某些字段过长; 2. 这个表有多少个索引,索引复杂度如何? 3. 是不是跟其他表有关联?关联表复杂度如何? 4. 服务器配置如何?是不是磁盘太慢?碎片过多? 上述原因都可能造成插入缓慢,批量插入可以改善效率;如果配合上述检查,你的算法效率会更上层楼。
独家de记忆 2018-01-12
  • 打赏
  • 举报
回复
建议楼主在java代码控制每次执行不大于1000条; 然后批量可参考: mysql:

复制代码
 1 <!-- 批量插入生成的兑换码 -->
 2      <insert id ="insertCodeBatch" parameterType="java.util.List" >
 3             <selectKey resultType ="java.lang.Integer" keyProperty= "id"
 4                  order= "AFTER">
 5                 SELECT LAST_INSERT_ID()
 6             </selectKey >
 7            insert into redeem_code
 8            (bach_id, code, type, facevalue,create_user,create_time)
 9            values
10             <foreach collection ="list" item="reddemCode" index= "index" separator =",">
11                 (
12                 #{reddemCode.batchId}, #{reddemCode.code},
13                 #{reddemCode.type},
14                 #{reddemCode.facevalue},
15                 #{reddemCode.createUser}, #{reddemCode.createTime}
16                 )
17             </foreach >
18      </insert >
oracle:

<insert id="insertBatch"
parameterType="List">

INSERT INTO TStudent(name,age)

<foreach collection="list"
item="item"
index="index"
open="("close=")"separator="union all">

SELECT #{item.name} as a, #{item.age} as b FROM DUAL

</foreach>

</insert>
maradona1984 2018-01-12
  • 打赏
  • 举报
回复
数据库是什么? mysql直接写insert into table (xxx,xxx,xxx) values (xxx,xxx,xxx) ,(xxx,xxx,xxx)这种方式,不需要修改mybatis配置 参考:http://blog.csdn.net/zxjiayou1314/article/details/52942809 如果是oracle,需要修改mybatis的Executor为BATCH,具体怎么修改自行百度,但有一个后遗症是无法获取记录变化数(乐观锁功能就用不了了),所以还是建议用mybatis原生的方法进行批量插入 参考:http://blog.csdn.net/java_mr_zheng/article/details/50476757

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧