当前位置: 首页 > 网络应用技术

Mybatis本地批处理坑和解决方案!

时间:2023-03-08 20:40:05 网络应用技术

  在上一篇文章中,我们讨论了Mybatis批处理插入的三种方法:循环单插入,Mybatis Plus Batch插入,Mybatis本机批处理插入,请单击“ mybatis批处理插入数据!”

  但是,上一篇文章也不完整,因为使用“骑自行车单插入”的性能太低,并且“ mybatis plus批处理插入”性能的性能还可以,但是有必要引入一个额外的Mybatis Plus框架和使用框架并使用“ Mybatis本地批量批量批量批量批量批处理面糊”插入“最佳性能”,但是该程序在插入大量数据时会导致错误。然后,今天,我们将提供更好的解决方案。

  首先,让我们看一下Mybatis本地批处理插入中的坑。当我们将100,000个数据批量插入时,实现代码如下:

  核心文件usermapper.xml中的实现代码如下:

  当我们高兴地运行上述程序时,将出现以下场景:

  WO,该程序报告了一个错误!

  这是因为使用Mybatis本机批处理插入SQL插入的SQL的大小为456m,并且MySQL默认情况下可以执行的最大SQL为4M,则在执行程序时将报告错误。

  以上问题是在批处理插入过程中拼接的SQL文件太大,因此报告了mySQL的执行。然后,我们首次想到的解决方案是将大文件分为n个小文件,以免引起一个小文件错误,因为SQL太大。换句话说,我们可以将列表设置为要插入多个小列表以执行批处理插入操作,并且此操作过程称为列表shard。

  随着处理的处理,下一个是实践。如何使用设置操作集合?

  实施碎片操作的方法有很多。我们稍后将讨论。接下来,我们使用最简单的方式,即Google提供的Guava框架来实现碎片的功能。

  为了实现碎片功能,第一步我们必须添加Guava框架的支持,将以下引号添加到pom.xml:

  接下来,我们写一个小演示,将以下7个人分为3组(每个组最多3),实现代码如下:

  上述程序的执行结果如下:

  从上面的结果可以看出,我们只需要使用列表。Guava提供的分歧方法即可轻松大小集合。

  然后,接下来的事情是改变我们的MyBatis批处理插入代码,具体实现如下:

  执行上述程序,最终执行结果如下:

  从上图可以看出,上一个批处理插入中的异常误差已经消失,并且实现方法的实现效率高于Mybatis Plus批处理插入的执行效率。Mybatis加上10W数据的批处理的执行时间如下:

  在本文中,我们证明了Mybatis本机批处理插入的问题:这可能导致操作失败,因为插入的数据太多了。我们可以通过一件问题解决这个问题。批处理插入的实现步骤如下:

  请注意公共帐户“ Java中国社区”,以获取更多Mybatis和Spring Boot系列文章。