色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Mybatis-Plus使用技巧與隱患分析

jf_ro2CN3Fa ? 來源:稀土掘金 ? 2023-07-27 10:39 ? 次閱讀

前言

MP 從出現就一直有爭議 感覺一直 都存在兩種聲音

like:

很方便啊 通過函數自動拼接Sql 不需要去XML 再去使用標簽 之前一分鐘寫好的Sql 現在一秒鐘就能寫好 簡直不要太方便

dislike:

侵入Service層 不好維護 可讀性差 代碼耦合 效率不行 sql優化比較難

之前也有前輩說少用MP 理由就是不好維護 但是這個東西真的是方便 只要不是強制不讓用 就還是會去使用 存在集合里 最近也確實有一些體會 就從兩個角度去看一下MP

優點

操作簡潔

就從我們編碼中最常用的增刪改查去說

按照我們之前去使用Mybatis的喜歡我們就要去建立一個XML文件 去編寫Sql語句 算是半自動 我們可以直接去操控Sql語句 但是會比較麻煩 很多簡單的數據查詢我們都要去寫一個標簽 感覺這種沒有意義的操作還是比較煩的 那么MP里面怎么實現

第一種:最簡單我們就是直接去使用提供的方法 我們非常簡單就能做到這些操作 但是這個就有一個問題

nodeMapper.selectById(1);
nodeMapper.deleteById(2);
nodeMapper.updateById(newNode());
nodeMapper.insert(newNode());

維護性差 以查詢為例 這個默認提供的方法都是查詢所有字段我們都知道在編寫Sql的時候第一條優化準則就是不要使用Select * 因為這種寫法是很Low

這個就是上面selectById執行的結果

SELECTId,name,pidFROMnodeWHEREId=?

這種Sql 肯定是不好的所以我們在使用MP的時候盡量不要去使用自帶的快捷查詢 我們可以去使用它里面的構造器

nodeMapper.selectOne(newQueryWrapper().eq("id",1).select("id"));

這匯總寫法 我們可以通過后面的select() 去指定我們需要查詢的字段 算是解決上面那個問題嗎 但是這個就完事了嗎?這還有一個問題

我們在開發中經常會說一個叫魔法值的東西

//這個就是魔法值
if("變成派大星".equals(node.getName())){
System.out.println("魔法值");
}

之所以不要多用魔法值就是為了后期維護 我們建議使用枚舉 或者建一個常量類 通過Static final修飾

上面那段代碼是不是也有同樣問題 "id"算不算魔法值呢 這種構造器產生的問題就是 不好維護

假設 我們的這Node類是高度使用的 我們到處都在寫

nodeMapper.selectOne(newQueryWrapper().eq("id",1).select("id"));

剛開始沒事 我們樂呵呵的 但是一旦我去修改Id 的字段名怎么辦

1047af64-2c1e-11ee-a368-dac502259ad0.jpg

我修改成test(數據庫同步修改) 現在這個實體類中沒有這個字段 我們再去看我們的代碼

105fb21c-2c1e-11ee-a368-dac502259ad0.jpg

沒有什么反應 沒有給我提示報錯 我這個時候去運行怎么辦 我要一個個去找這個錯誤嗎 這明顯很費時間

這個確實是一個問題 但是也是可以解決的

Nodenode=nodeMapper.selectOne(newLambdaQueryWrapper().eq(Node::getId,1).select(Node::getId));

上面這種代碼就可以去解決這個問題 我們在使用的時候可以多用這個東西

108021d2-2c1e-11ee-a368-dac502259ad0.jpg

一旦修改字段就會立馬報錯

但是 這就萬事大吉了嗎 NO No NO 我們要是處理稍微復雜的語句怎么辦?比如如我們字段求和 這個LambdaQueryWrapper還是存在限制的

如果我們想實現這種 怎么去做呢

selectSUM(price_count)frombla_order_dataLIMIT100

首先這種寫法肯定是不太行的 編譯不通過

108fee3c-2c1e-11ee-a368-dac502259ad0.jpg

除非去使用QueryWrapper

10a60d70-2c1e-11ee-a368-dac502259ad0.jpg

還有就是分頁查詢

//條件查詢
LambdaQueryWrapperqueryWrapper=newLambdaQueryWrapper<>();
queryWrapper.eq(UserInfo::getAge,20);
//分頁對象
PagequeryPage=newPage<>(page,limit);
//分頁查詢
IPageiPage=userInfoMapper.selectPage(queryPage,queryWrapper);
//數據總數
Longtotal=iPage.getTotal();
//集合數據
Listlist=iPage.getRecords();

這個還是非常簡單的

簡單總結

MP 在做一些簡單的單表查詢可以去使用但是對于一些復雜的SQl操作還是不要用

1、SQL侵入Service 的問題我們可以仿照 Mybatis 建一個專門存放 MP查詢的包

2、關于維護性 我們可以盡量去使用 LambdaQueryWrapper 去構造

3、MP是有內置的主鍵生成策略

4、內置分頁插件:基于 Mybatis 物理分頁,開發者無需關心具體操作,配置好插件之后,寫分頁等同于普通List查詢。

缺點

我就說一個最大的缺點就是對于復雜Sql 的操作性很不舒服 比如我們去多表查詢 你怎么去寫呢

看一個例子

10bc9446-2c1e-11ee-a368-dac502259ad0.jpg10cd123a-2c1e-11ee-a368-dac502259ad0.jpg

就是通過 @Select 注解將Mp的查詢條件嵌入進去${ew.customSqlSegment}

咱就是一整個大問號 聯表老老實實去寫XML吧 這種真的不要去用 太丑了

總結

沒有過多的東西 基本都是最近看到的東西

1、復雜語句不推薦使用MP 能用最好也別用 可讀性差 難維護 使用剛開始沒感覺 后期業務擴充 真的惡心的

2、可以使用MP中的分頁 比較舒服 逐漸生成策略也舒服

3、盡量不要去使用MP中自帶的selectById 等全表查詢的方法

4、盡量使用LambdaQueryWrapper的書寫形式 至少比較好維護

5、簡單重復Sql 可以用MP。復雜SQL不要用






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編碼器
    +關注

    關注

    45

    文章

    3639

    瀏覽量

    134440
  • SQL
    SQL
    +關注

    關注

    1

    文章

    762

    瀏覽量

    44117
  • XML技術
    +關注

    關注

    0

    文章

    15

    瀏覽量

    6011

原文標題:Mybatis-Plus 使用技巧與隱患

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    一文了解MyBatis的查詢原理

    本文通過MyBatis一個低版本的bug(3.4.5之前的版本)入手,分析MyBatis的一次完整的查詢流程,從配置文件的解析到一個查詢的完整執行過程詳細解讀MyBatis的一次查詢流
    的頭像 發表于 10-10 11:42 ?1425次閱讀

    mybatis plus的常規用法

    上篇文章我們介紹過通過 Mybatis Plus 進行增刪改查,如下這段代碼: /** * 根據id修改 * UPDATE user SET user_name=?, user_age
    的頭像 發表于 09-25 15:06 ?906次閱讀
    <b class='flag-5'>mybatis</b> <b class='flag-5'>plus</b>的常規用法

    #硬聲創作季 Java項目實戰:MyBatis-Plus簡介

    PlusJAVA編程語言
    Mr_haohao
    發布于 :2022年09月07日 10:15:17

    Mybatis的內部設計介紹

    Mybatis源碼分析-整體設計(一)
    發表于 06-06 09:43

    一篇讓你熟練掌握 MyBatis-Plus

    MyBatis-plus 是一款 Mybatis 增強工具,用于簡化開發,提高效率。下文使用縮寫 mp來簡化表示 MyBatis-plus,本文主要介紹 mp 搭配 Spring Boot
    的頭像 發表于 06-01 09:30 ?2600次閱讀
    一篇讓你熟練掌握 <b class='flag-5'>MyBatis-Plus</b>!

    Mybatis-Plus Mybatis增強工具包

    ./oschina_soft/gitee-mybatis-plus.zip
    發表于 06-13 11:34 ?1次下載
    <b class='flag-5'>Mybatis-Plus</b> <b class='flag-5'>Mybatis</b>增強工具包

    MyBatis-Plus的使用與測試

    本文主要介紹mybatis-plus這款插件,針對springboot用戶。包括引入,配置,使用,以及擴展等常用的方面做一個匯總整理,盡量包含大家常用的場景內容。
    的頭像 發表于 08-22 11:56 ?1315次閱讀

    Fluent Mybatis、原生MybatisMybatis Plus對比

    mapper中再組裝參數。那對比原生Mybatis, Mybatis Plus或者其他框架,FluentMybatis提供了哪些便利呢?
    的頭像 發表于 09-15 15:41 ?1432次閱讀

    SpringBoot中MybatisX插件的簡單使用教程

    MybatisX 是一款基于 IDEA 的快速開發插件,方便在使用mybatis以及mybatis-plus開始時簡化繁瑣的重復操作,提高開發速率。
    的頭像 發表于 02-21 09:49 ?1285次閱讀

    MyBatis-Plus為什么不支持聯表

    MyBatis Plus Join`一款專門解決MyBatis Plus 關聯查詢問題的擴展框架,他并不一款全新的框架,而是基于`MyBatis
    的頭像 發表于 02-28 15:19 ?2455次閱讀
    <b class='flag-5'>MyBatis-Plus</b>為什么不支持聯表

    介紹一款基于Mybatis-Plus的代碼自助生成器

    在基于Mybatis的開發模式中,很多開發者還會選擇Mybatis-Plus來輔助功能開發,以此提高開發的效率。
    的頭像 發表于 05-23 14:16 ?1140次閱讀
    介紹一款基于<b class='flag-5'>Mybatis-Plus</b>的代碼自助生成器

    如何調優MyBatis 25倍性能

    最近在壓測一批接口,發現接口處理速度慢的有點超出預期,感覺很奇怪,后面定位發現是數據庫批量保存這塊很慢。 這個項目用的是 mybatis-plus,批量保存直接用的是 mybatis-plus 提供的 saveBatch。 我點進去看了下源碼,感覺有點不太對勁
    的頭像 發表于 05-30 09:56 ?603次閱讀
    如何調優<b class='flag-5'>MyBatis</b> 25倍性能

    你還在手寫join聯表查詢?MyBatis-Plus這樣寫太香了!

    眾所周知,mybatis plus 封裝的 mapper 不支持 join,如果需要支持就必須自己去實現。但是對于大部分的業務場景來說,都需要多表 join,要不然就沒必要采用關系型數據庫了。
    的頭像 發表于 07-07 10:19 ?2682次閱讀
    你還在手寫join聯表查詢?<b class='flag-5'>MyBatis-Plus</b>這樣寫太香了!

    MyBatis Plus如何簡化開發

    本篇文章,我們通過 MyBatis Plus 來對一張表進行 CRUD 操作,來看看是如何簡化我們開發的。 1、創建測試表 創建 USER 表: DROP TABLE IF EXISTS
    的頭像 發表于 10-09 15:08 ?425次閱讀
    <b class='flag-5'>MyBatis</b> <b class='flag-5'>Plus</b>如何簡化開發

    mybatis和mybatisplus的區別

    MyBatisMyBatis Plus是兩個非常受歡迎的Java持久層框架。這兩個框架在設計和功能上有一些區別,下面我將詳細介紹它們之間的差異以及各自的特點。 設計理念與目標: MyBati
    的頭像 發表于 12-03 11:53 ?2547次閱讀
    主站蜘蛛池模板: 黄页免费观看| 美女被黑人巨大进入| 乱辈通奷XXXXXHD猛交| 漂亮的保姆3中文版完整版 | 性女传奇 快播| 最近免费中文字幕完整版HD| 99久久中文字幕伊人情人| 国产区在线不卡视频观看| 毛片免费播放| 小蝌蚪视频在线观看免费观看WWW| 中文字幕高清在线观看| 国产精品国产三级国产AV麻豆| 久久毛片基地| 无码日本亚洲一区久久精品 | 欧美深深色噜噜狠狠yyy| 亚洲精品国产自在在线观看| 99久久国产极品蜜臀AV酒店| 国内国外精品影片无人区| 欧美片第1页 综合| 一攻多受高h大总攻| 国产精品路线1路线2路线| 男女又黄又刺激B片免费网站 | 美女脱衣服搞鸡| 亚洲国产精品第一影院在线观看| a在线观看视频| 久久99精品AV99果冻| 卫生间被教官做好爽HH视频| 999精品国产人妻无码系列| 饥渴的新婚女教师| 少妇内射视频播放舔大片| 99久久久无码国产精精品| 久久国产乱子伦精品免费不卡 | 一本之道高清在线观看免费| 国产成人精品亚洲线观看| 欧美久久综合网| 最美白虎逼| 精品一成人岛国片在线观看| 婷婷五月久久丁香国产综合| www.精品久久| 男人叼女人| 2019中文字幕乱码免费|