在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

jf_ro2CN3Fa ? 來源:芋道源碼 ? 2023-07-07 10:19 ? 次閱讀

  • 使用方法
    • 安裝
    • 使用
  • 核心類 MPJLambdaWrapper和MPJQueryWrapper
    • MPJLambdaWrapper用法
    • MPJQueryWrapper

71f3eb8c-1c66-11ee-962d-dac502259ad0.jpg


眾所周知,mybatis plus 封裝的 mapper 不支持 join,如果需要支持就必須自己去實(shí)現(xiàn)。但是對(duì)于大部分的業(yè)務(wù)場(chǎng)景來說,都需要多表 join,要不然就沒必要采用關(guān)系型數(shù)據(jù)庫了。

那么有沒有一種不通過硬 SQL 的形式,通過框架提供 join 能力呢?答案是,可以有。經(jīng)過一段時(shí)間的插眼排眼操作,成功的封裝了一個(gè) jar 包。本文講講它的用法。

使用方法

安裝

  • Maven
<dependency>
<groupId>com.github.yulichanggroupId>
<artifactId>mybatis-plus-joinartifactId>
<version>1.2.4version>
dependency>
  • Gradle
implementation'com.github.yulichang1.2.4'

或者 clone 代碼到本地執(zhí)行 mvn install,再引入以上依賴。

注意:mybatis plus version >= 3.4.0。

使用

  • mapper繼承MPJBaseMapper (必選)
  • service繼承MPJBaseService (可選)
  • serviceImpl繼承MPJBaseServiceImpl (可選)

基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項(xiàng)目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

核心類 MPJLambdaWrapper和MPJQueryWrapper

MPJLambdaWrapper用法

簡(jiǎn)單的三表查詢

classtest{
@Resource
privateUserMapperuserMapper;

voidtestJoin(){
Listlist=userMapper.selectJoinList(UserDTO.class,
newMPJLambdaWrapper<UserDO>()
.selectAll(UserDO.class)
.select(UserAddressDO::getTel)
.selectAs(UserAddressDO::getAddress,UserDTO::getUserAddress)
.select(AreaDO::getProvince,AreaDO::getCity)
.leftJoin(UserAddressDO.class,UserAddressDO::getUserId,UserDO::getId)
.leftJoin(AreaDO.class,AreaDO::getId,UserAddressDO::getAreaId)
.eq(UserDO::getId,1)
.like(UserAddressDO::getTel,"1")
.gt(UserDO::getId,5));
}
}

對(duì)應(yīng)sql

SELECT
t.id,
t.name,
t.sex,
t.head_img,
t1.tel,
t1.addressASuserAddress,
t2.province,
t2.city
FROM
usert
LEFTJOINuser_addresst1ONt1.user_id=t.id
LEFTJOINareat2ONt2.id=t1.area_id
WHERE(
t.id=?
ANDt1.telLIKE?
ANDt.id>?)

說明:

  • UserDTO.class 查詢結(jié)果返回類(resultType)
  • selectAll() 查詢指定實(shí)體類的全部字段
  • select() 查詢指定的字段,支持可變參數(shù),同一個(gè)select只能查詢相同表的字段故將UserAddressDO和AreaDO分開為兩個(gè)select()
  • selectAs() 字段別名查詢,用于數(shù)據(jù)庫字段與業(yè)務(wù)實(shí)體類屬性名不一致時(shí)使用
  • leftJoin() 參數(shù)說明第一個(gè)參數(shù): 參與連表的實(shí)體類class第二個(gè)參數(shù): 連表的ON字段,這個(gè)屬性必須是第一個(gè)參數(shù)實(shí)體類的屬性第三個(gè)參數(shù): 參與連表的ON的另一個(gè)實(shí)體類屬性
  • 默認(rèn)主表別名是t,其他的表別名以先后調(diào)用的順序使用t1,t2,t3....
  • 條件查詢,可以查詢主表以及參與連接的所有表的字段,全部調(diào)用mp原生的方法,正常使用沒有sql注入風(fēng)險(xiǎn)

MPJLambdaWrapper 還有很多其他的功能

  • 簡(jiǎn)單的SQL函數(shù)使用:https://gitee.com/best_handsome/mybatis-plus-join/wikis/selectFunc()?sort_id=4082479
  • ON語句多條件支持:https://gitee.com/best_handsome/mybatis-plus-join/wikis/leftJoin?sort_id=3496671

分頁查詢

classtest{
@Resource
privateUserMapperuserMapper;

voidtestJoin(){
IPageiPage=userMapper.selectJoinPage(newPage<>(2,10),UserDTO.class,
newMPJLambdaWrapper<UserDO>()
.selectAll(UserDO.class)
.select(UserAddressDO::getTel)
.selectAs(UserAddressDO::getAddress,UserDTO::getUserAddress)
.select(AreaDO::getProvince,AreaDO::getCity)
.leftJoin(UserAddressDO.class,UserAddressDO::getUserId,UserDO::getId)
.leftJoin(AreaDO.class,AreaDO::getId,UserAddressDO::getAreaId));
}
}

對(duì)應(yīng)sql

SELECT
t.id,
t.name,
t.sex,
t.head_img,
t1.tel,
t1.addressASuserAddress,
t2.province,
t2.city
FROM
usert
LEFTJOINuser_addresst1ONt1.user_id=t.id
LEFTJOINareat2ONt2.id=t1.area_id
LIMIT?,?

MPJQueryWrapper

簡(jiǎn)單的3表查詢

classtest{
@Resource
privateUserMapperuserMapper;

voidtestJoin(){
Listlist=userMapper.selectJoinList(UserDTO.class,
newMPJQueryWrapper<UserDO>()
.selectAll(UserDO.class)
.select("addr.tel","addr.address","a.province")
.leftJoin("user_addressaddront.id=addr.user_id")
.rightJoin("areaaonaddr.area_id=a.id")
.like("addr.tel","1")
.le("a.province","1"));
}
}

對(duì)應(yīng) sql

SELECT
t.id,
t.name,
t.sex,
t.head_img,
addr.tel,
addr.address,
a.province
FROM
usert
LEFTJOINuser_addressaddront.id=addr.user_id
RIGHTJOINareaaonaddr.area_id=a.id
WHERE(
addr.telLIKE?
ANDa.province<=??)

說明:

  • UserDTO.class 查詢結(jié)果類(resultType)
  • selectAll(UserDO.class) 查詢主表全部字段(主表實(shí)體類)默認(rèn)主表別名 "t"
  • select() mp的select策略是覆蓋,以最后一次為準(zhǔn),這里的策略是追加,可以一直select主表字段可以用lambda,會(huì)自動(dòng)添加表別名,主表別名默認(rèn)是 t ,非主表字段必須帶別名查詢
  • leftJoin() rightJoin() innerJoin() 傳sql片段 格式 (表 + 別名 + 關(guān)聯(lián)條件)
  • 條件查詢,可以查詢主表以及參與連接的所有表的字段,全部調(diào)用mp原生的方法,正常使用沒有sql注入風(fēng)險(xiǎn)

分頁查詢

classtest{
@Resource
privateUserMapperuserMapper;

voidtestJoin(){
IPagepage=userMapper.selectJoinPage(newPage<>(1,10),UserDTO.class,
newMPJQueryWrapper<UserDO>()
.selectAll(UserDO.class)
.select("addr.tel","addr.address")
.select("a.province")
.leftJoin("user_addressaddront.id=addr.user_id")
.rightJoin("areaaonaddr.area_id=a.id"));
}
}

對(duì)應(yīng)sql

SELECT
t.id,
t.name,
t.sex,
t.head_img,
addr.tel,
addr.address,
a.province
FROM
usert
LEFTJOINuser_addressaddront.id=addr.user_id
RIGHTJOINareaaonaddr.area_id=a.id
LIMIT?,?

還可以這么操作,但不建議

classtest{
@Resource
privateUserMapperuserMapper;

voidtestJoin(){
Listlist=userMapper.selectJoinList(UserDTO.class,
newMPJQueryWrapper<UserDO>()
.selectAll(UserDO.class)
.select("addr.tel","addr.address")
//行列轉(zhuǎn)換
.select("CASEt.sexWHEN'男'THEN'1'ELSE'0'ENDASsex")
//求和函數(shù)
.select("sum(a.province)ASprovince")
//自定義數(shù)據(jù)集
.leftJoin("(select*fromuser_address)addront.id=addr.user_id")
.rightJoin("areaaonaddr.area_id=a.id")
.like("addr.tel","1")
.le("a.province","1")
.orderByDesc("addr.id"));
}
}

對(duì)應(yīng)sql

SELECT
t.id,
t.name,
t.sex,
t.head_img,
addr.tel,
addr.address,
CASEt.sexWHEN'男'THEN'1'ELSE'0'ENDASsex,
sum(a.province)ASprovince
FROM
usert
LEFTJOIN(select*fromuser_address)addront.id=addr.user_id
RIGHTJOINareaaonaddr.area_id=a.id
WHERE(
addr.telLIKE?
ANDa.province<=??)
ORDERBY
addr.idDESC

針對(duì)以上 jar 感興趣的,可以下載對(duì)應(yīng)的源碼,進(jìn)一步的學(xué)習(xí)!



聲明:本文內(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)投訴
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3852

    瀏覽量

    64738
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    653

    瀏覽量

    29514
  • Join
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    3271

原文標(biāo)題:你還在手寫 join 聯(lián)表查詢?MyBatis-Plus 這樣寫太香了!

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    一文了解MyBatis查詢原理

    可以詳細(xì)了解MyBatis的一次查詢過程。在平時(shí)的代碼編寫中,發(fā)現(xiàn)MyBatis一個(gè)低版本的bug(3.4.5之前的版本),由于現(xiàn)在很多工程中的版本都是低于3.4.5的,因此在這里用
    的頭像 發(fā)表于 10-10 11:42 ?1478次閱讀

    如何一鍵生成mybatisplus

    的代碼??赡軇e人花兩天時(shí)間完成的代碼,一個(gè)小時(shí)就搞定。 1、官方教程 參考文檔如下:https://mybatis.plus/guide/generator.html 其實(shí)官方教程
    的頭像 發(fā)表于 09-25 14:23 ?812次閱讀
    如何一鍵生成mybatisplus

    mybatis plus的常規(guī)用法

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

    一篇讓熟練掌握 MyBatis-Plus

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

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

    使用fluent mybatis可以不用具體的xml文件,通過java api可以構(gòu)造出比較復(fù)雜的業(yè)務(wù)sql語句,做到代碼邏輯和sql邏輯的合一。不再需要在Dao中組裝查詢或更新操作,在xml或
    的頭像 發(fā)表于 09-15 15:41 ?1487次閱讀

    源碼學(xué)習(xí)之MyBatis的底層查詢原理

    可以詳細(xì)了解MyBatis的一次查詢過程。在平時(shí)的代碼編寫中,發(fā)現(xiàn)MyBatis一個(gè)低版本的bug(3.4.5之前的版本),由于現(xiàn)在很多工程中的版本都是低于3.4.5的,因此在這里用
    的頭像 發(fā)表于 10-10 11:42 ?862次閱讀

    Mybatis Plus或者其他框架及FluentMybatis提供哪些便利呢?

    使用fluent mybatis可以不用具體的xml文件,通過java api可以構(gòu)造出比較復(fù)雜的業(yè)務(wù)sql語句,做到代碼邏輯和sql邏輯的合一。
    的頭像 發(fā)表于 02-03 15:16 ?832次閱讀

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

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

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

    `的所有功能`MyBatis Plus Join`同樣擁有;框架的使用方式和`MyBatis Plus`一樣簡(jiǎn)單,幾行代碼就能實(shí)現(xiàn)
    的頭像 發(fā)表于 02-28 15:19 ?2554次閱讀
    <b class='flag-5'>MyBatis-Plus</b>為什么不支持<b class='flag-5'>聯(lián)</b><b class='flag-5'>表</b>

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

    在基于Mybatis的開發(fā)模式中,很多開發(fā)者還會(huì)選擇Mybatis-Plus來輔助功能開發(fā),以此提高開發(fā)的效率。
    的頭像 發(fā)表于 05-23 14:16 ?1211次閱讀
    介紹一款基于<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ù)庫批量保存這塊很慢。 這個(gè)項(xiàng)目用的是 mybatis-plus,批量保存直接用的是 mybatis-plus 提供的 saveBatch。 我點(diǎn)進(jìn)去看了下源碼,感覺有點(diǎn)不太對(duì)勁
    的頭像 發(fā)表于 05-30 09:56 ?667次閱讀
    如何調(diào)優(yōu)<b class='flag-5'>MyBatis</b> 25倍性能

    SpringBoot+Mybatis如何實(shí)現(xiàn)流式查詢

    使用mybatis作為持久層的框架時(shí),通過mybatis執(zhí)行查詢數(shù)據(jù)的請(qǐng)求執(zhí)行成功后,mybatis返回的結(jié)果集不是一個(gè)集合或?qū)ο螅且粋€(gè)迭代器,可以通過遍歷迭代器來取出結(jié)果集
    的頭像 發(fā)表于 06-12 09:57 ?1325次閱讀

    MySQL聯(lián)查詢優(yōu)化

    使用顯示連接left join(right join,inner join),盡量避免隱式連接(where逗號(hào)連接 .... and .... and ...)這類寫法,假設(shè)三張
    的頭像 發(fā)表于 04-24 12:33 ?654次閱讀
    MySQL<b class='flag-5'>聯(lián)</b><b class='flag-5'>表</b><b class='flag-5'>查詢</b>優(yōu)化
    主站蜘蛛池模板: 国产成人精品亚洲日本在线 | 男人和女人做爽爽视频在线观看 | 免费无遮挡很爽很污很黄 | 亚洲欧美在线精品一区二区 | 欧美黄色影院 | 欧美一级免费片 | 99热久久精品最新 | 亚洲美国avcom | 色综合久久中文综合网 | 免费在线观看一区二区 | 伊人网在线视频观看 | 丁香伊人五月综合激激激 | 日韩美女奶水喂男人在线观看 | 一级做a爱片特黄在线观看免费看 | 国产精品久久久久乳精品爆 | 又黄又湿又爽 | 免费看黄的视频网站 | 久久久久免费观看 | 日本人xxxxxxxx6969 | 在线免费观看一级毛片 | 亚洲伊人久久大香线蕉综合图片 | 色播五月激情 | 特级毛片永久久免费观看 | 欧美性色欧美a在线播放 | 五月天婷五月天综合网在线 | 中文字幕一区二区三区免费看 | 老司机亚洲精品影院在线 | 色777777女人色 | 午夜免费免费啪视频观看 | 最好看的最新中文字幕2018免费视频 | 五月天婷婷网亚洲综合在线 | 男人的j桶女人的j视频 | 亚洲成人免费观看 | 免费观看黄色在线视频 | 亚洲v在线 | 亚洲色图狠狠干 | 手机午夜看片 | 欧美成人精品久久精品 | 色网站在线看 | 欧美日韩a级a| 日日拍夜夜嗷嗷叫狠狠 |