欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

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

前言

MP 從出現(xiàn)就一直有爭(zhēng)議 感覺一直 都存在兩種聲音

like:

很方便啊 通過函數(shù)自動(dòng)拼接Sql 不需要去XML 再去使用標(biāo)簽 之前一分鐘寫好的Sql 現(xiàn)在一秒鐘就能寫好 簡(jiǎn)直不要太方便

dislike:

侵入Service層 不好維護(hù) 可讀性差 代碼耦合 效率不行 sql優(yōu)化比較難

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

優(yōu)點(diǎn)

操作簡(jiǎn)潔

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

按照我們之前去使用Mybatis的喜歡我們就要去建立一個(gè)XML文件 去編寫Sql語句 算是半自動(dòng) 我們可以直接去操控Sql語句 但是會(huì)比較麻煩 很多簡(jiǎn)單的數(shù)據(jù)查詢我們都要去寫一個(gè)標(biāo)簽 感覺這種沒有意義的操作還是比較煩的 那么MP里面怎么實(shí)現(xiàn)

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

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

維護(hù)性差 以查詢?yōu)槔?這個(gè)默認(rèn)提供的方法都是查詢所有字段我們都知道在編寫Sql的時(shí)候第一條優(yōu)化準(zhǔn)則就是不要使用Select * 因?yàn)檫@種寫法是很Low

這個(gè)就是上面selectById執(zhí)行的結(jié)果

SELECTId,name,pidFROMnodeWHEREId=?

這種Sql 肯定是不好的所以我們?cè)谑褂肕P的時(shí)候盡量不要去使用自帶的快捷查詢 我們可以去使用它里面的構(gòu)造器

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

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

我們?cè)陂_發(fā)中經(jīng)常會(huì)說一個(gè)叫魔法值的東西

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

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

上面那段代碼是不是也有同樣問題 "id"算不算魔法值呢 這種構(gòu)造器產(chǎn)生的問題就是 不好維護(hù)

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

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

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

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

我修改成test(數(shù)據(jù)庫(kù)同步修改) 現(xiàn)在這個(gè)實(shí)體類中沒有這個(gè)字段 我們?cè)偃タ次覀兊拇a

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

沒有什么反應(yīng) 沒有給我提示報(bào)錯(cuò) 我這個(gè)時(shí)候去運(yùn)行怎么辦 我要一個(gè)個(gè)去找這個(gè)錯(cuò)誤嗎 這明顯很費(fèi)時(shí)間

這個(gè)確實(shí)是一個(gè)問題 但是也是可以解決的

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

上面這種代碼就可以去解決這個(gè)問題 我們?cè)谑褂玫臅r(shí)候可以多用這個(gè)東西

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

一旦修改字段就會(huì)立馬報(bào)錯(cuò)

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

如果我們想實(shí)現(xiàn)這種 怎么去做呢

selectSUM(price_count)frombla_order_dataLIMIT100

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

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

除非去使用QueryWrapper

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

還有就是分頁(yè)查詢

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

這個(gè)還是非常簡(jiǎn)單的

簡(jiǎn)單總結(jié)

MP 在做一些簡(jiǎn)單的單表查詢可以去使用但是對(duì)于一些復(fù)雜的SQl操作還是不要用

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

2、關(guān)于維護(hù)性 我們可以盡量去使用 LambdaQueryWrapper 去構(gòu)造

3、MP是有內(nèi)置的主鍵生成策略

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

缺點(diǎn)

我就說一個(gè)最大的缺點(diǎn)就是對(duì)于復(fù)雜Sql 的操作性很不舒服 比如我們?nèi)ザ啾聿樵?你怎么去寫呢

看一個(gè)例子

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

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

咱就是一整個(gè)大問號(hào) 聯(lián)表老老實(shí)實(shí)去寫XML吧 這種真的不要去用 太丑了

總結(jié)

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

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

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

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

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

5、簡(jiǎn)單重復(fù)Sql 可以用MP。復(fù)雜SQL不要用






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編碼器
    +關(guān)注

    關(guān)注

    45

    文章

    3673

    瀏覽量

    135286
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    775

    瀏覽量

    44263
  • XML技術(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    6038

原文標(biāo)題:Mybatis-Plus 使用技巧與隱患

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    一文了解MyBatis的查詢?cè)?/a>

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

    mybatis plus的常規(guī)用法

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

    #硬聲創(chuàng)作季 Java項(xiàng)目實(shí)戰(zhàn):MyBatis-Plus簡(jiǎn)介

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

    #硬聲創(chuàng)作季 Java項(xiàng)目實(shí)戰(zhàn):Mybatis-plus的樂觀鎖方案

    PlusJAVA編程語言
    Mr_haohao
    發(fā)布于 :2022年09月07日 10:30:56

    Mybatis的內(nèi)部設(shè)計(jì)介紹

    Mybatis源碼分析-整體設(shè)計(jì)(一)
    發(fā)表于 06-06 09:43

    一篇讓你熟練掌握 MyBatis-Plus

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

    Mybatis-Plus Mybatis增強(qiáng)工具包

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

    MyBatis-Plus的使用與測(cè)試

    本文主要介紹mybatis-plus這款插件,針對(duì)springboot用戶。包括引入,配置,使用,以及擴(kuò)展等常用的方面做一個(gè)匯總整理,盡量包含大家常用的場(chǎng)景內(nèi)容。
    的頭像 發(fā)表于 08-22 11:56 ?1376次閱讀

    Fluent Mybatis、原生MybatisMybatis Plus對(duì)比

    mapper中再組裝參數(shù)。那對(duì)比原生Mybatis, Mybatis Plus或者其他框架,F(xiàn)luentMybatis提供了哪些便利呢?
    的頭像 發(fā)表于 09-15 15:41 ?1486次閱讀

    SpringBoot中MybatisX插件的簡(jiǎn)單使用教程

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

    MyBatis-Plus為什么不支持聯(lián)表

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

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

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

    如何調(diào)優(yōu)MyBatis 25倍性能

    最近在壓測(cè)一批接口,發(fā)現(xiàn)接口處理速度慢的有點(diǎn)超出預(yù)期,感覺很奇怪,后面定位發(fā)現(xiàn)是數(shù)據(jù)庫(kù)批量保存這塊很慢。 這個(gè)項(xiàng)目用的是 mybatis-plus,批量保存直接用的是 mybatis-plus 提供的 saveBatch。 我點(diǎn)進(jìn)去看了下源碼,感覺有點(diǎn)不太對(duì)勁
    的頭像 發(fā)表于 05-30 09:56 ?665次閱讀
    如何調(diào)優(yōu)<b class='flag-5'>MyBatis</b> 25倍性能

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

    眾所周知,mybatis plus 封裝的 mapper 不支持 join,如果需要支持就必須自己去實(shí)現(xiàn)。但是對(duì)于大部分的業(yè)務(wù)場(chǎng)景來說,都需要多表 join,要不然就沒必要采用關(guān)系型數(shù)據(jù)庫(kù)了。
    的頭像 發(fā)表于 07-07 10:19 ?3044次閱讀
    你還在手寫join聯(lián)表查詢?<b class='flag-5'>MyBatis-Plus</b>這樣寫太香了!

    mybatis和mybatisplus的區(qū)別

    MyBatisMyBatis Plus是兩個(gè)非常受歡迎的Java持久層框架。這兩個(gè)框架在設(shè)計(jì)和功能上有一些區(qū)別,下面我將詳細(xì)介紹它們之間的差異以及各自的特點(diǎn)。 設(shè)計(jì)理念與目標(biāo): MyBati
    的頭像 發(fā)表于 12-03 11:53 ?2667次閱讀