为啥:使用mybatis-plus的批量插入接口特别慢?

本人Java实习生,做项目时遇到困难如题。团队项目代码用的是mybatis-plus的IService接口的saveBatch方法,但速度特别慢。

我在网上搜关于saveBatch的资料,很少,只知道batchSize是分批处理时一次性处理的数据条数,它的本质是为了让开发者选取一个小于数据库支持的size值,以便碰到异常时可以针对提交的数据进行回滚。

下图是我项目运行时插入的数据条数和对应耗时。

可以通过配置什么的优化它吗?有使用Mybatis-plus遇到同样问题的吗?可以解决吗?求大神帮忙,万分感谢

上面的图二三是Mybatis-plus的IService接口的源码

1190条数据  java 要通过网络传输1190条sql,1190条网络请求 你还想多快..

但是批量传输不应该这么慢的呀,而且我这数据量算小的了吧,看网上有对比批量传输和循环单条传输,也就是几秒几千条就完成了。

那就是你们那个公用方法有问题,你自己在mapper里面写一个,然后自己调lrc,就好了

你的根本就不是批量执行,批量执行底层是调用的JDBC的batchExecute方法,一次提交大量数据,效率贼J8块。
参见preparedstatement的batchexecute

公用方法是Mybatis-Plus自己的,这么优秀的开源框架,按理来说应该不会有问题的呀,网上也没有人问类似的问题,好神奇

MybatisPlus的批量执行底层应该是和Mybatis一样的,那Mybatis底层批量也是JDBC的batchExecute吗?

你这是循环中插入啊,意味着后台代码和数据库交互了n次,哪里是批量插入!

mybatis-plus这个批量插入没什么问题虽然效率低了点,从mybatis获取一个ExecutorType.BATCH的SqlSession 执行插入,插入的代码估计在mybatis的BatchExecutor.doUpdate里,反正一顿乱七八糟的处理懒得看代码了,但底层确实是用了 stmt.addBatch()和stmt.executeBatch的,估计是中间的处理性能太差
参考这个

https://blog.csdn.net/m0_37981235/article/details/79131493
用xml的foreach标签批量插入吧。。。

老哥,这么多回答感觉你最靠谱!

看控制台打印数据,并不是1000插入一次,所以速度并不是很快,但是什么原因造成的,怎么优化,不知道!进一步优化就是用xml的foreach标签批量插入.

发布了79 篇原创文章 · 获赞 2 · 访问量 2252

猜你喜欢

转载自blog.csdn.net/liuji0517/article/details/104892612