AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁 > 科技  > 軟件

Mybatis-Plus很好,但是我被它坑了!

來源: 責(zé)編: 時(shí)間:2023-10-31 10:26:06 272觀看
導(dǎo)讀作者今天在開發(fā)一個(gè)后臺(tái)發(fā)送消息的功能時(shí),由于需要給多個(gè)用戶發(fā)送消息,于是使用了 mybatis plus 提供的 saveBatch() 方法,在測(cè)試環(huán)境測(cè)試通過上預(yù)發(fā)布后,測(cè)試反應(yīng)發(fā)送消息接口很慢得等 5、6 秒,于是我就登錄線上環(huán)境查看

作者今天在開發(fā)一個(gè)后臺(tái)發(fā)送消息的功能時(shí),由于需要給多個(gè)用戶發(fā)送消息,于是使用了 mybatis plus 提供的 saveBatch() 方法,在測(cè)試環(huán)境測(cè)試通過上預(yù)發(fā)布后,測(cè)試反應(yīng)發(fā)送消息接口很慢得等 5、6 秒,于是我就登錄線上環(huán)境查看執(zhí)行日志,發(fā)現(xiàn)是 mybatis plus 提供的 saveBatch() 方法執(zhí)行很慢導(dǎo)致,于是也就有了本篇文章。0OD28資訊網(wǎng)——每日最新資訊28at.com

mybatis plus 是一個(gè)流行的 ORM 框架,它基于 mybatis,提供了很多便利的功能,比如代碼生成器、通用 CRUD、分頁插件、樂觀鎖插件等。它可以讓我們更方便地操作數(shù)據(jù)庫,減少重復(fù)的代碼,提高開發(fā)效率。0OD28資訊網(wǎng)——每日最新資訊28at.com

案發(fā)現(xiàn)場(chǎng)還原

/** * 先保存通知消息,在批量保存用戶通知記錄 */@Transactional(rollbackFor = Exception.class)@Overridepublic boolean saveNotice(Notify notify, String receiveUserIds) {    long begin = System.currentTimeMillis();    notify.setCreateTime(new Date());    notify.setCreateBy(ShiroUtil.getSessionUid());    if (notify.getPublishTime() == null) {        notify.setPublishTime(new Date());    }    boolean insert = save(notify);    List<NotifyRecord> collect = new ArrayList<>();    List<String> receiveUserList = fillNotifyRecordList(notify, receiveUserIds, collect);    notifyRecordService.saveBatch(collect);    long end = System.currentTimeMillis();    System.out.println(end - begin);    ...    return insert;}/** * 根據(jù)用戶id,組裝用戶通知記錄集合,返回200條記錄 */public List<String> fillNotifyRecordList(Notify notify, String receiveUserIds, List<NotifyRecord> collect) {    List<String> noticeRecordList = new ArrayList<>(200);    ...    // 組將兩百條用戶通知記錄    return noticeRecordList;}

如上代碼,我有一個(gè) saveNotice() 方法用于保存通知消息以及用戶通知記錄。執(zhí)行邏輯如下,0OD28資訊網(wǎng)——每日最新資訊28at.com

  1. 保存通知消息
  2. 根據(jù)用戶 id,組裝用戶通知記錄集合,返回 200 條用戶通知記錄
  3. 批量保存用戶通知記錄集合

前兩步驟耗時(shí)都很少,我們直接看第三步操作耗時(shí),結(jié)合 sql 執(zhí)行日志,如下,0OD28資訊網(wǎng)——每日最新資訊28at.com

-- slow sql 5542 millis. INSERT INTO oa_notify_record  ( notifyId, receiveUserId, receiveUserName, isRead,  createTime )  VALUES  ( ?, ?, ?, ?,  ? )[225,"fcd90fe3990e505d07c90a238f75e9c1","niuwawa",false,"2023-10-30 23:54:04"]5681

再結(jié)合 mybatis free log 插件打印完整 sql 如下圖,0OD28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片0OD28資訊網(wǎng)——每日最新資訊28at.com

可以看出,我們批量保存用戶通知記錄是一條記錄一條進(jìn)行保存得,已經(jīng)可以猜測(cè)就是批量插入方法導(dǎo)致得耗時(shí)較高。0OD28資訊網(wǎng)——每日最新資訊28at.com

這里使用得是 mybatis log free 插件,它可以自動(dòng)幫我們?cè)诳刂婆_(tái)打印完整得 mybatis sql 語句。有需要可以在 idea 插件中心搜索 mybatis log free 下載安裝。0OD28資訊網(wǎng)——每日最新資訊28at.com

結(jié)合 saveBatch() 底層源碼也能夠看出,mybatis plus 對(duì)于批量操作是通過 for 循環(huán)執(zhí)行保存操作得,源碼如下圖,0OD28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片0OD28資訊網(wǎng)——每日最新資訊28at.com

到這里我們也就知道了在測(cè)試環(huán)境執(zhí)行較快得原因,因?yàn)樵跍y(cè)試環(huán)境需要批量保存得用戶通知記錄比較少,只有幾條記錄,所以很快。但是上預(yù)發(fā)布后,由于預(yù)發(fā)布中需要批量保存得用戶通知記錄比較多達(dá)到了數(shù)百條,所以執(zhí)行較慢,耗時(shí)達(dá)到了 5、6 秒之久。0OD28資訊網(wǎng)——每日最新資訊28at.com

解決方法

到這里,也就是本文得重點(diǎn)所在了,那怎么解決這個(gè)問題嘞?如何既利用 mybatis plus 提供得便攜性,也能夠解決批量操作耗時(shí)較高得問題。0OD28資訊網(wǎng)——每日最新資訊28at.com

其實(shí)解決方法很簡單,只需要在 jdbcurl 上添加 rewriteBatchedStatements=true 參數(shù)即可解決這個(gè)問題。0OD28資訊網(wǎng)——每日最新資訊28at.com

MySQL 的 JDBC 連接的 url 中要加 rewriteBatchedStatements 參數(shù),并保證 5.1.13 以上版本的驅(qū)動(dòng),才能實(shí)現(xiàn)高性能的批量插入。0OD28資訊網(wǎng)——每日最新資訊28at.com

MySQL JDBC 驅(qū)動(dòng)在默認(rèn)情況下會(huì)無視 executeBatch()語句,把我們期望批量執(zhí)行的一組 sql 語句拆散,一條一條地發(fā)給 MySQL 數(shù)據(jù)庫,批量插入實(shí)際上是單條插入,直接造成較低的性能。只有把 rewriteBatchedStatements 參數(shù)置為 true, 驅(qū)動(dòng)才會(huì)幫你批量執(zhí)行 SQL。另外這個(gè)選項(xiàng)對(duì) INSERT/UPDATE/DELETE 都有效。0OD28資訊網(wǎng)——每日最新資訊28at.com

rewriteBatchedStatements=true 的意思是,當(dāng)你在 Java 程序中使用批量插入/修改/刪除(batching)時(shí),MySQL JDBC 驅(qū)動(dòng)程序?qū)L試重新編寫(rewrite)你的 SQL 語句,以便更有效地執(zhí)行這些批量插入操作。0OD28資訊網(wǎng)——每日最新資訊28at.com

OK,在我們給 jdbcurl 上添加了參數(shù)后,看看效果,如下圖,0OD28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片0OD28資訊網(wǎng)——每日最新資訊28at.com

可以看到 jdbcurl 添加了 rewriteBatchedStatements=true 參數(shù)后,批量操作的執(zhí)行耗時(shí)已經(jīng)只有 200 毫秒,自此也就解決了 mybatis plus 提供的 saveBatch() 方法執(zhí)行耗時(shí)較高得問題。0OD28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

mybatis plus 給開發(fā)人員帶來了很多便利,但是其中也有一些坑點(diǎn),比如上文所提到得批量操作耗時(shí)問題,如果不注意的話,就有可能調(diào)入坑里,各位開發(fā)同學(xué)可以檢查自己或者公司項(xiàng)目中 jdbcurl 是否缺失 rewriteBatchedStatements=true 參數(shù),加以改正,避免重復(fù)掉入這個(gè)坑里。0OD28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-16030-0.htmlMybatis-Plus很好,但是我被它坑了!

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: REST API設(shè)計(jì)模式和反模式

下一篇: 一文搞定專屬碼的設(shè)計(jì)與開發(fā)

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 一加Ace2 Pro官宣:普及16G內(nèi)存 引領(lǐng)24G

    一加官方今天繼續(xù)為本月發(fā)布的新機(jī)一加Ace2 Pro帶來預(yù)熱,公布了內(nèi)存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引領(lǐng),還有呢?#一加Ace2Pro#,2023 年 8 月,敬請(qǐng)期待。”同時(shí)
  • 28個(gè)SpringBoot項(xiàng)目中常用注解,日常開發(fā)、求職面試不再懵圈

    前言在使用SpringBoot開發(fā)中或者在求職面試中都會(huì)使用到很多注解或者問到注解相關(guān)的知識(shí)。本文主要對(duì)一些常用的注解進(jìn)行了總結(jié),同時(shí)也會(huì)舉出具體例子,供大家學(xué)習(xí)和參考。注解
  • K8S | Service服務(wù)發(fā)現(xiàn)

    一、背景在微服務(wù)架構(gòu)中,這里以開發(fā)環(huán)境「Dev」為基礎(chǔ)來描述,在K8S集群中通常會(huì)開放:路由網(wǎng)關(guān)、注冊(cè)中心、配置中心等相關(guān)服務(wù),可以被集群外部訪問;圖片對(duì)于測(cè)試「Tes」環(huán)境或者
  • 這款新興工具平臺(tái),讓你的電腦效率翻倍

    隨著信息技術(shù)的發(fā)展,我們獲取信息的渠道越來越多,但是處理信息的效率卻成為一個(gè)瓶頸。于是各種工具應(yīng)運(yùn)而生,都在爭相解決我們的工作效率問題。今天我要給大家介紹一款效率
  • 自律,給不了Keep自由!

    來源 | 互聯(lián)網(wǎng)品牌官作者 | 李大為編排 | 又耳 審核 | 谷曉輝自律能不能給用戶自由暫時(shí)不好說,但大概率不能給Keep自由。近日,全球最大的在線健身平臺(tái)Keep正式登陸港交所,努力
  • 阿里大調(diào)整

    來源:產(chǎn)品劉有媒體報(bào)道稱,近期淘寶天貓集團(tuán)啟動(dòng)了近年來最大的人力制度改革,涉及員工績效、層級(jí)體系等多個(gè)核心事項(xiàng),目前已形成一個(gè)初步的&ldquo;征求意見版&rdquo;:1、取消P序列
  • 三星Galaxy Z Fold/Flip 5國行售價(jià)曝光 :最低7499元/12999元起

    據(jù)官方此前宣布,三星將于7月26日也就是明天在韓國首爾舉辦Unpacked活動(dòng),屆時(shí)將帶來帶來包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • iQOO Neo8 Pro真機(jī)諜照曝光:天璣9200+和V1+旗艦雙芯加持

    去年10月,iQOO推出了iQOO Neo7系列機(jī)型,不僅搭載了天璣9000+,而且是同價(jià)位唯一一款天璣9000+直屏旗艦,一經(jīng)上市便受到了用戶的廣泛關(guān)注。在時(shí)隔半年后,
  • 英特爾Xe-HP項(xiàng)目終止,將專注Xe-HPC/HPG系列顯卡

    據(jù)10 月 31 日消息報(bào)道,英特爾高級(jí)副總裁兼加速計(jì)算系統(tǒng)和圖形事業(yè)部總經(jīng)理 表示,Xe-HP“ Arctic Sound” 系列服務(wù)器 GPU 已經(jīng)應(yīng)用于 oneAPI devcloud 云服
Top