成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Mybatis-plus的批量插入真的不能用嗎?

原創(chuàng) 精選
數(shù)據(jù)庫(kù)
在很多公司,經(jīng)常聽(tīng)到“不要用 mybatis-plus 的批量插入,它其實(shí)也是遍歷插入,性能很差的”。真的是這樣嗎?我們不應(yīng)該人云亦云,應(yīng)該自己去探究下。

作者 | 蔡柱梁

審校 | 重樓

前言

在很多公司,經(jīng)常聽(tīng)到“不要用 mybatis-plus 的批量插入,它其實(shí)也是遍歷插入,性能很差的”。真的是這樣嗎?我們不應(yīng)該人云亦云,應(yīng)該自己去探究下。

我們先針對(duì)這個(gè)觀點(diǎn)分析下,總結(jié)出來(lái)他們的看法大概率是下面的其中一種:

  1. 遍歷插入,反復(fù)創(chuàng)建。這是一個(gè)比較重的操作,所以性能很差。
    這里不用看源碼也能知道,因?yàn)檫@個(gè)和mybatis-plus沒(méi)關(guān)系,而且我們現(xiàn)在使用了SpringBoot,一般也用它的JDBC啟動(dòng)依賴。連接和連接池不是本章節(jié)的重點(diǎn),就不展開(kāi)講了,總的來(lái)說(shuō)這觀點(diǎn)是不正確的。
  2. 一條 insert 就一次網(wǎng)絡(luò)IO,數(shù)量多了,這是個(gè)很可觀且沒(méi)必要的開(kāi)銷,所以性能差。

走進(jìn)源碼

對(duì)這第二個(gè)觀點(diǎn),筆者結(jié)合源碼給出自己的觀點(diǎn)。給出筆者的一些相關(guān)配置(使用mybatis-plus的版本是3.5.3.1

pom.xml如下:

...
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
 <groupId>com.baomidou</groupId>
 <artifactId>mybatis-plus-boot-starter</artifactId>
 <version>3.5.3.1</version>
</dependency>
...

application.yml如下:

Spring:
  # 使用默認(rèn)的連接池庫(kù) 
  datasource:
    url: "*****"
    username: "****"
    password: "****"

筆者的Service如下圖:

1 進(jìn)入 saveBatch 看下

com.baomidou.mybatisplus.extension.service.IService#saveBatch(java.util.Collection)

發(fā)現(xiàn)里面會(huì)給我們這個(gè)批量操作開(kāi)啟了事務(wù)(如果是期望插入一條就成功一條的,這批量方法就不適用了)并且是有限制提交數(shù)量的,默認(rèn)1000。

2 往里ServiceImpl#saveBatch走

com.baomidou.mybatisplus.extension.service.impl.ServiceImpl#saveBatch

看到了mybatis-plus 的批量插入是一條條插入的,但是這個(gè)一次次的遍歷是真的發(fā)送給MySQL了嗎?這里留一個(gè)疑問(wèn)。我們只要記得這里有一個(gè)鉤子,后面會(huì)回調(diào)回來(lái)執(zhí)行

3 SqlHelper#executeBatch(Class<?>, Log, Collection, int, BiConsumer<SqlSession,E>)

com.baomidou.mybatisplus.extension.toolkit.SqlHelper#executeBatch(java.lang.Class<?>, org.apache.ibatis.logging.Log, java.util.Collection, int, java.util.function.BiConsumer<org.apache.ibatis.session.SqlSession,E>)

sqlSession 是從哪里來(lái)的呢?我們?nèi)タ聪陆貓D里面的executeBatch。

4 SqlHelper#executeBatch(Class<?> entityClass, Log log, Consumer consumer)

com.baomidou.mybatisplus.extension.toolkit.SqlHelper#executeBatch(java.lang.Class<?>, org.apache.ibatis.logging.Log, java.util.function.Consumer<org.apache.ibatis.session.SqlSession>)

結(jié)合前面的代碼就知道了,我這里是到了1000(默認(rèn)配置1000,并且我批量保存的list超過(guò)了1000),就會(huì)開(kāi)啟會(huì)話,將內(nèi)存的sql全部刷到MySQL,然后回去繼續(xù)遍歷。

總結(jié)

到這里大家應(yīng)該都清楚的知道了 mybatis-plus 的批量插入雖然是遍歷插入,但是不是一個(gè)insert就一次IO,而是打包了一次發(fā)送一批的,所以性能不會(huì)有什么太大問(wèn)題。不過(guò)筆者這里不是鼓吹大家都用這個(gè)批量插入就好了,實(shí)際工作中會(huì)有更多要求,有時(shí)這個(gè)簡(jiǎn)單的批量插入是沒(méi)法滿足的。因此,筆者只是提倡可以根據(jù)自己工作實(shí)際情況決定,但是性能方面就不用太過(guò)擔(dān)心mybatis-plus 也有考慮的

擴(kuò)展

如果使用mybatis-plus 3.4+ 版本,并且連接的是 MySQL 8.0 或更高版本的數(shù)據(jù)庫(kù),那么 mybatis-plus將會(huì)自動(dòng)利用MySQL 8.0 的原生批量插入功能來(lái)執(zhí)行批量插入操作。

具體實(shí)現(xiàn)的關(guān)鍵是在mybatis-plus的底層使用了mybatis-plus的批量新增方法時(shí),mybatis-plus會(huì)將待插入的對(duì)象列表傳遞給底層的而

需要注意的是,要確保以下條件滿足才能利用

  1. 使用
  2. 使用兼容
  3. 使用mybatis-plus 3.4+ 版本

作者介紹

蔡柱梁,51CTO社區(qū)編輯,從事Java后端開(kāi)發(fā)8年,做過(guò)傳統(tǒng)項(xiàng)目廣電BOSS系統(tǒng),后投身互聯(lián)網(wǎng)電商,負(fù)責(zé)過(guò)訂單,TMS,中間件等。

責(zé)任編輯:華軒 來(lái)源: 51CTO
相關(guān)推薦

2024-11-28 19:03:56

2024-07-31 09:56:20

2021-09-27 07:56:41

MyBatis Plu數(shù)據(jù)庫(kù)批量插入

2024-12-20 16:49:15

MyBatis開(kāi)發(fā)代碼

2022-09-29 10:06:56

SQLMySQL服務(wù)端

2025-02-27 09:45:47

2023-06-07 08:08:37

MybatisSpringBoot

2023-07-29 22:02:06

MyBatis數(shù)據(jù)庫(kù)配置

2023-06-14 08:34:18

Mybatis死鎖框架

2023-10-31 08:01:48

Mybatis參數(shù)jdbcurl?

2024-02-28 09:35:52

2012-11-08 16:16:41

Linux開(kāi)源軟件

2023-01-12 09:13:49

Mybatis數(shù)據(jù)庫(kù)

2025-05-26 03:20:00

SpringMyBatis數(shù)據(jù)權(quán)限

2025-02-06 07:45:44

2025-02-13 07:59:13

2023-01-17 09:13:08

Mybatis后端框架

2021-10-18 07:58:33

MyBatis Plu數(shù)據(jù)庫(kù)批量插入

2021-10-09 06:59:36

技術(shù)MyBatis數(shù)據(jù)

2025-05-08 09:15:00

代碼架構(gòu)耦合
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 嫩草一区二区三区 | 国产线视频精品免费观看视频 | 国产精品99久久久久久动医院 | 欧美精品成人 | 日韩精品一区二区三区在线播放 | 91伦理片| 国产999精品久久久久久 | 成人一区二 | 91一区二区三区在线观看 | 在线一区二区三区 | 久久99国产精品久久99果冻传媒 | 午夜久久久久久久久久一区二区 | 中文字幕日韩一区 | 国产一极毛片 | 欧美高清性xxxxhdvideosex | 欧美日韩在线一区 | 亚洲视频一区二区三区 | 日日干夜夜操 | 一级国产精品一级国产精品片 | 婷婷国产一区二区三区 | 男女啪啪高潮无遮挡免费动态 | 欧美日本在线观看 | 亚洲一区二区视频在线播放 | www..com18午夜观看 | 夜夜爽99久久国产综合精品女不卡 | 日韩一区二区三区四区五区 | 四虎国产| 日韩在线欧美 | 男人的天堂一级片 | 国产精品久久国产精品 | 亚洲视频免费观看 | 久久88 | 欧洲视频一区 | 国产黄色在线观看 | 亚洲444kkkk在线观看最新 | 亚洲福利电影网 | 欧洲一区二区三区 | 日本天天色 | 亚洲精品99999 | 国产精品久久久久久久久久久久久 | 精品久久一区 |