最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis-Plus實(shí)現(xiàn)多表聯(lián)查方式(一對(duì)一,一對(duì)多使用)

 更新時(shí)間:2025年10月15日 09:59:47   作者:慷?慨  
文章介紹了MyBatis-Plus-Join插件,一個(gè)在MyBatis-Plus基礎(chǔ)上增強(qiáng)的工具,支持聯(lián)表查詢(xún)而不改變?cè)写a結(jié)構(gòu),MPJ插件無(wú)侵入性,兼容MyBatis-Plus的多種特性,并支持注解形式的一對(duì)一和一對(duì)多查詢(xún)

1、前言

在使用mybatis-plus開(kāi)發(fā)需求的時(shí)候會(huì)發(fā)現(xiàn)對(duì)于大部分的業(yè)務(wù)場(chǎng)景來(lái)說(shuō)都會(huì)使用到j(luò)oin來(lái)進(jìn)行聯(lián)表查詢(xún),但是mybatis-plus封裝的 mapper 不支持 join,如果需要支持就需要自己手動(dòng)去實(shí)現(xiàn),給大家推薦一個(gè)好用的插件(MyBatis-Plus-Join)。

2、介紹

Mybatis-Plus-Join(簡(jiǎn)稱(chēng) MPJ)是一個(gè) Mybatis-Plus的增強(qiáng)工具,在 MyBatis-Plus 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開(kāi)發(fā)、提高效率而生。

3、特性

  • 無(wú)侵入:只做增強(qiáng)不做改變,引入它不會(huì)對(duì)現(xiàn)有工程產(chǎn)生影響,如絲般順滑
  • 無(wú)感引入, 支持MP風(fēng)格的查詢(xún), 您會(huì)MP就會(huì)MPJ, 無(wú)需額外的學(xué)習(xí)成本
  • 兼容MP的別名、邏輯刪除、枚舉列、TypeHandle列等特性
  • 支持注解形式一對(duì)一、一對(duì)多和連表查詢(xún)形式的一對(duì)一和一對(duì)多

4、使用

引依賴(lài)

需要 Mybatis-plus version >= 3.4.0

<dependency>
            <groupId>com.github.yulichang</groupId>
            <artifactId>mybatis-plus-join-boot-starter</artifactId>
            <version>1.4.7.2</version>
        </dependency>

繼承

  • (必須)mapper繼承MPJBaseMapper
public interface CarIllegalMapper extends MPJBaseMapper<CarIllegal>
{
}
  • (可選)service繼承MPJBaseService
public interface ICarIllegalService  extends MPJBaseService<CarIllegal>{}
  • (可選)serviceImpl繼承MPJBaseServiceImpl
@Service
public class CarIllegalServiceImpl extends MPJBaseServiceImpl<CarIllegalMapper, CarIllegal> implements ICarIllegalService
{}

開(kāi)始使用

現(xiàn)有一張car_illegal(車(chē)輛違章)表和一張attachments_file(附件)表,其關(guān)聯(lián)關(guān)系是每輛違章車(chē)數(shù)據(jù)可能對(duì)應(yīng)著一條或多條的違章圖片(附件),以這兩張表為例來(lái)進(jìn)行一對(duì)一和一對(duì)多測(cè)試。

一對(duì)一

說(shuō)明

  • CarIllegalDto.class 查詢(xún)結(jié)果返回類(lèi)(resultType)
  • selectAll() 查詢(xún)指定實(shí)體類(lèi)的全部字段
  • select() 查詢(xún)指定的字段,支持可變參數(shù),同一個(gè)select只能查詢(xún)相同表的字段
  • selectAs() 字段別名查詢(xún),用于數(shù)據(jù)庫(kù)字段與業(yè)務(wù)實(shí)體類(lèi)屬性名不一致時(shí)使用

leftJoin() 參數(shù)說(shuō)明

  • 第一個(gè)參數(shù): 參與連表的實(shí)體類(lèi)class
  • 第二個(gè)參數(shù): 連表的ON字段,這個(gè)屬性必須是第一個(gè)參數(shù)實(shí)體類(lèi)的屬性
  • 第三個(gè)參數(shù): 參與連表的ON的另一個(gè)實(shí)體類(lèi)屬性

默認(rèn)主表別名是t,其他的表別名以先后調(diào)用的順序使用t1,t2,t3…

  • selectAssociation()一對(duì)一查詢(xún)
  • selectCollection()一對(duì)多查詢(xún)
@SpringBootTest(classes = DeXinApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@RunWith(SpringRunner.class)
@Slf4j
class DeXinApplicationTests {

    @Autowired
    private CarIllegalMapper carIllegalMapper;

    @Test
    public void testSelect() {
         MPJLambdaWrapper wrapper = new MPJLambdaWrapper<CarIllegalDto>()
                .selectAll(CarIllegalDto.class)
                .selectAssociation(AttachmentsFile.class,CarIllegalDto::getAttachmentsFile)
                   .leftJoin(AttachmentsFile.class,AttachmentsFile::getTargetId,CarIllegal::getId);
        List<CarIllegalDto> carIllegalDtoList = carIllegalMapper.selectJoinList(CarIllegalDto.class,wrapper);
    }
}

返回的實(shí)體類(lèi)

@Data
public class  CarIllegalDto extends  CarIllegal
{
    AttachmentsFile attachmentsFile;

    List<AttachmentsFile> attachmentsFileList;
}

 查詢(xún)結(jié)果

一對(duì)多

  @Test
    public void testSelect() {
        MPJLambdaWrapper wrapper = new MPJLambdaWrapper<CarIllegalDto>()
                .selectAll(CarIllegalDto.class)
                .selectCollection(AttachmentsFile.class,CarIllegalDto::getAttachmentsFileList)
                .leftJoin(AttachmentsFile.class,AttachmentsFile::getTargetId,CarIllegal::getId);
        List<CarIllegalDto> carIllegalDtoList = carIllegalMapper.selectJoinList(CarIllegalDto.class,wrapper);
        System.out.println(1);
    }

結(jié)果 

分頁(yè)查詢(xún)

連表分頁(yè)查詢(xún)返回所有命中記錄(請(qǐng)啟用mybatis-plus分頁(yè)插件)

import com.baomidou.mybatisplus.core.metadata.IPage; 


   @Test
    public void testSelect() throws IOException {
        MPJLambdaWrapper wrapper = new MPJLambdaWrapper<CarIllegalDto>()
                .selectAll(CarIllegalDto.class)
                .selectAs(AttachmentsFile::getId,CarIllegalDto::getCarNo)
                .selectCollection(AttachmentsFile.class,CarIllegalDto::getAttachmentsFileList)
                .leftJoin(AttachmentsFile.class,AttachmentsFile::getTargetId, CarIllegal::getId);
        IPage<CarIllegalDto> carIllegalDtoList = carIllegalMapper.selectJoinPage(new Page<>(1, 10),CarIllegalDto.class,wrapper);
        System.out.println(carIllegalDtoList);
    }

結(jié)果

5、MPJLambdaWrapper所有方法說(shuō)明

select

  • 查詢(xún)指定字段 
select(AttachmentsFile::getName)
  • 支持可變參數(shù)
select(AttachmentsFile::getName,AttachmentsFile::getEnterpriseId)
  • 自定義字符串查詢(xún),需要對(duì)查詢(xún)的表命名別名
select("file.id");
select("file.id as 'pid'");
select("file.id", "file.name");

//需要對(duì)表進(jìn)行別名
 .leftJoin(AttachmentsFile.class,"file",AttachmentsFile::getTargetId,CarIllegal::getId);

selectAll

  • 查詢(xún)指定類(lèi)的全部字段 
.selectAll(CarIllegalDto.class)

注意事項(xiàng):

  • 一般一次查詢(xún)只建議調(diào)用一次selectAll(), 因?yàn)椴煌碇g可能會(huì)存在相同的字段, 比如id,create_time等通用字段, 多次調(diào)用會(huì)導(dǎo)致字段名重復(fù), 除非能保證字段不重復(fù)
  • 所以一次查詢(xún)推薦只使用一次, 并且通常是對(duì)主表使用, 其他表字段通過(guò)其他方式查詢(xún), 比如select, selectAs, selectAsClass等

selectAs

  • 別名查詢(xún) 
.selectAs(AttachmentsFile::getId,CarIllegalDto::getCarNo)

//對(duì)應(yīng)sql
t.id AS carNo

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Java線程池和Executor原理的分析

    詳解Java線程池和Executor原理的分析

    這篇文章主要介紹了詳解Java線程池和Executor原理的分析的相關(guān)資料,這里提供實(shí)例及分析原理幫助大家理解這部分知識(shí),需要的朋友可以參考下
    2017-07-07
  • Java?IO?API實(shí)現(xiàn)獲取路徑信息并去除冗余信息

    Java?IO?API實(shí)現(xiàn)獲取路徑信息并去除冗余信息

    這篇文章主要為大家詳細(xì)介紹了Java?IO?API實(shí)現(xiàn)獲取路徑信息并去除冗余信息,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2026-03-03
  • J2SE基礎(chǔ)之JDK環(huán)境變量配置

    J2SE基礎(chǔ)之JDK環(huán)境變量配置

    進(jìn)行java開(kāi)發(fā),首先要安裝jdk,安裝了jdk后還要進(jìn)行環(huán)境變量配置,下面我們就來(lái)詳細(xì)探討下這個(gè)問(wèn)題。
    2016-05-05
  • java使用正則抓取網(wǎng)頁(yè)郵箱

    java使用正則抓取網(wǎng)頁(yè)郵箱

    這篇文章主要為大家詳細(xì)介紹了java使用正則抓取網(wǎng)頁(yè)郵箱的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-05-05
  • java實(shí)現(xiàn)人員信息管理系統(tǒng)

    java實(shí)現(xiàn)人員信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)人員信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 使用Java實(shí)現(xiàn)在Excel中創(chuàng)建下拉列表

    使用Java實(shí)現(xiàn)在Excel中創(chuàng)建下拉列表

    下拉列表(下拉框)可以確保用戶僅從預(yù)先給定的選項(xiàng)中進(jìn)行選擇,這樣不僅能減少數(shù)據(jù)輸入錯(cuò)誤,還能節(jié)省時(shí)間提高效率,下面我們就來(lái)看看如何在java中利用免費(fèi)庫(kù)實(shí)現(xiàn)創(chuàng)建下拉列表吧
    2024-03-03
  • java時(shí)區(qū)時(shí)間轉(zhuǎn)為UTC的代碼示例和詳細(xì)解釋

    java時(shí)區(qū)時(shí)間轉(zhuǎn)為UTC的代碼示例和詳細(xì)解釋

    作為一名經(jīng)驗(yàn)豐富的開(kāi)發(fā)者,我經(jīng)常被問(wèn)到如何將Java中的時(shí)間轉(zhuǎn)換為UTC時(shí)間,這篇文章主要介紹了java時(shí)區(qū)時(shí)間轉(zhuǎn)為UTC的代碼示例和詳細(xì)解釋,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-09-09
  • Java三大最常用集合List、Set、Map用法詳解

    Java三大最常用集合List、Set、Map用法詳解

    在Java集合框架中,List、Set、Map是最核心的三大接口,它們分別對(duì)應(yīng)線性表、集合、鍵值對(duì)映射三種數(shù)據(jù)結(jié)構(gòu),各自有獨(dú)特的設(shè)計(jì)目標(biāo)和適用場(chǎng)景,這篇文章主要介紹了Java三大最常用集合List、Set、Map用法的相關(guān)資料,需要的朋友可以參考下
    2026-02-02
  • spring aop底層原理及如何實(shí)現(xiàn)

    spring aop底層原理及如何實(shí)現(xiàn)

    這篇文章主要介紹了spring aop底層原理及如何實(shí)現(xiàn),幫助大家更好的理解和學(xué)習(xí)使用spring aop,感興趣的朋友可以了解下
    2021-04-04
  • java web SpringMVC后端傳json數(shù)據(jù)到前端頁(yè)面實(shí)例代碼

    java web SpringMVC后端傳json數(shù)據(jù)到前端頁(yè)面實(shí)例代碼

    本篇文章主要介紹了java web SpringMVC后端傳json數(shù)據(jù)到前端頁(yè)面實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-03-03

最新評(píng)論

达拉特旗| 福鼎市| 绵竹市| 新田县| 喀喇沁旗| 武清区| 罗山县| 丽江市| 锡林浩特市| 友谊县| 莱西市| 随州市| 灵川县| 班戈县| 错那县| 东乌珠穆沁旗| 琼海市| 福泉市| 哈巴河县| 长葛市| 兴化市| 睢宁县| 乌拉特后旗| 沽源县| 卢湾区| 维西| 江都市| 包头市| 砚山县| 汉川市| 烟台市| 西乌| 苏尼特左旗| 吉木乃县| 克山县| 周至县| 景德镇市| 隆化县| 青神县| 龙江县| 龙里县|