精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

MyBatis-Plus聯表查詢的短板,終于有一款工具補齊了

數據庫 MySQL
直到前幾天,偶然碰到了這么一款叫做mybatis-plus-join?的工具(后面就簡稱mpj?了),使用了一下,不得不說真香!徹底將我從xml地獄中解放了出來,終于可以以類似mybatis-plus中QueryWrapper的方式來進行聯表查詢了,話不多說,我們下面開始體驗。

哈嘍大家好啊,我是Hydra。

mybatis-plus?作為mybatis?的增強工具,它的出現極大的簡化了開發中的數據庫操作,但是長久以來,它的聯表查詢能力一直被大家所詬病。一旦遇到left join或right join的左右連接,你還是得老老實實的打開xml文件,手寫上一大段的sql語句。

直到前幾天,偶然碰到了這么一款叫做mybatis-plus-join?的工具(后面就簡稱mpj?了),使用了一下,不得不說真香!徹底將我從xml地獄中解放了出來,終于可以以類似mybatis-plus中QueryWrapper的方式來進行聯表查詢了,話不多說,我們下面開始體驗。

引入依賴

首先在項目中引入引入依賴坐標,因為mpj?中依賴較高版本mybatis-plus中的一些api,所以項目建議直接使用高版本。

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

引入相關依賴后,在springboot項目中,像往常一樣正常配置數據源連接信息就可以了。

數據準備

因為要實現聯表查詢,所以我們先來建幾張表進行測試。

訂單表:

圖片

用戶表,包含用戶姓名:

圖片

商品表,包含商品名稱和單價:

圖片

在訂單表中,通過用戶id和商品id與其他兩張表進行關聯。

修改Mapper

以往在使用myatis-plus?的時候,我們的Mapper?層接口都是直接繼承的BaseMapper?,使用mpj?后需要對其進行修改,改為繼承MPJBaseMapper接口。

@Mapper
public interface OrderMapper extends MPJBaseMapper<Order> {
}

對其余兩個表的Mapper?接口也進行相同的改造。此外,我們的service?也可以選擇繼承MPJBaseService,serviceImpl?選擇繼承MPJBaseServiceImpl,這兩者為非必須繼承。

查詢

Mapper?接口改造完成后,我們把它注入到Service?中,雖然說我們要完成3張表的聯表查詢,但是以Order?作為主表的話,那么只注入這一個對應的OrderMapper就可以,非常簡單。

@Service
@AllArgsConstructor
public class OrderServiceImpl implements OrderService {
private final OrderMapper orderMapper;
}

MPJLambdaWrapper

接下來,我們體驗一下再也不用寫sql的聯表查詢:

public void getOrder() {
List<OrderDto> list = orderMapper.selectJoinList(OrderDto.class,
new MPJLambdaWrapper<Order>()
.selectAll(Order.class)
.select(Product::getUnitPrice)
.selectAs(User::getName,OrderDto::getUserName)
.selectAs(Product::getName,OrderDto::getProductName)
.leftJoin(User.class, User::getId, Order::getUserId)
.leftJoin(Product.class, Product::getId, Order::getProductId)
.eq(Order::getStatus,3));

list.forEach(System.out::println);
}

不看代碼,我們先調用接口來看一下執行結果:

圖片

可以看到,成功查詢出了關聯表中的信息,下面我們一點點介紹上面代碼的語義。

首先,調用mapper的selectJoinList()?方法,進行關聯查詢,返回多條結果。后面的第一個參數OrderDto.class?代表接收返回查詢結果的類,作用和我們之前在xml?中寫的resultType類似。

這個類可以直接繼承實體,再添加上需要在關聯查詢中返回的列即可:

@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class OrderDto extends Order {
String userName;
String productName;
Double unitPrice;
}

接下來的MPJLambdaWrapper就是構建查詢條件的核心了,看一下我們在上面用到的幾個方法:

  • selectAll():查詢指定實體類的全部字段
  • select()?:查詢指定的字段,支持可變長參數同時查詢多個字段,但是在同一個select中只能查詢相同表的字段,所以如果查詢多張表的字段需要分開寫
  • selectAs()?:字段別名查詢,用于數據庫字段與接收結果的dto中屬性名稱不一致時轉換
  • leftJoin()?:左連接,其中第一個參數是參與聯表的表對應的實體類,第二個參數是這張表聯表的ON?字段,第三個參數是參與聯表的ON的另一個實體類屬性

除此之外,還可以正常調用mybatis-plus?中的各種原生方法,文檔中還提到,默認主表別名是t?,其他的表別名以先后調用的順序使用t1、t2、t3以此類推。

我們用插件讀取日志轉化為可讀的sql語句,可以看到兩條左連接條件都被正確地添加到了sql中:

圖片

MPJQueryWrapper

和mybatis-plus?非常類似,除了LamdaWrapper?外還提供了普通QueryWrapper的寫法,改造上面的代碼:

public void getOrderSimple() {
List<OrderDto> list = orderMapper.selectJoinList(OrderDto.class,
new MPJQueryWrapper<Order>()
.selectAll(Order.class)
.select("t2.unit_price","t2.name as product_name")
.select("t1.name as user_name")
.leftJoin("t_user t1 on t1.id = t.user_id")
.leftJoin("t_product t2 on t2.id = t.product_id")
.eq("t.status", "3")
);

list.forEach(System.out::println);
}

運行結果與之前完全相同,需要注意的是,這樣寫時在引用表名時不要使用數據庫中的原表名,主表默認使用t?,其他表使用join語句中我們為它起的別名,如果使用原表名在運行中會出現報錯。

并且,在MPJQueryWrapper中,可以更靈活的支持子查詢操作,如果業務比較復雜,那么使用這種方式也是不錯的選擇。

分頁查詢

mpj中也能很好的支持列表查詢中的分頁功能,首先我們要在項目中加入分頁攔截器:

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
return interceptor;
}

接下來改造上面的代碼,調用selectJoinPage()方法:

public void page() {
IPage<OrderDto> orderPage = orderMapper.selectJoinPage(
new Page<OrderDto>(2,10),
OrderDto.class,
new MPJLambdaWrapper<Order>()
.selectAll(Order.class)
.select(Product::getUnitPrice)
.selectAs(User::getName, OrderDto::getUserName)
.selectAs(Product::getName, OrderDto::getProductName)
.leftJoin(User.class, User::getId, Order::getUserId)
.leftJoin(Product.class, Product::getId, Order::getProductId)
.orderByAsc(Order::getId));

orderPage.getRecords().forEach(System.out::println);
}

注意在這里需要添加一個分頁參數的Page對象,我們再執行上面的代碼,并對日志進行解析,查看sql語句:

圖片

可以看到底層通過添加limit?進行了分頁,同理,MPJQueryWrapper也可以這樣進行分頁。

最后

經過簡單的測試,個人感覺mpj?這款工具在聯表查詢方面還是比較實用的,能更應對項目中不是非常復雜的場景下的sql查詢,大大提高我們的生產效率。當然,在項目的issues中也能看到當前版本中也仍然存在一些問題,希望在后續版本迭代中能繼續完善。

責任編輯:武曉燕 來源: 碼農參上
相關推薦

2022-12-09 17:53:36

MyBatis聯表查詢

2023-07-29 22:02:06

MyBatis數據庫配置

2024-12-20 16:49:15

MyBatis開發代碼

2018-09-13 10:42:00

工具代碼機器學習

2023-10-31 08:01:48

Mybatis參數jdbcurl?

2021-07-09 10:14:05

IP工具命令

2022-04-14 11:09:17

開源項目搜索

2020-12-18 08:38:22

開源前端mitojs

2015-09-23 17:39:52

Github開源工具

2015-09-28 09:56:17

Github開源工具編程

2023-10-05 06:16:02

2011-08-09 09:16:44

Eclipse

2025-02-27 09:45:47

2022-05-20 12:24:45

分庫分表Java依賴

2025-10-28 01:15:00

2020-10-13 10:19:30

Go工具Group

2023-06-07 08:00:00

MySQL批量插入

2025-07-10 09:32:23

2023-06-07 08:08:37

MybatisSpringBoot

2021-01-27 13:16:39

ScreenLinux命令
點贊
收藏

51CTO技術棧公眾號

国产一级二级三级精品| 久久天堂电影网| 免费黄色特级片| 成人性生交大片免费看午夜| 久久精品国产久精国产| 大胆人体色综合| 国产福利在线观看视频| 免费成人黄色网| 亚洲亚洲人成综合网络| 日韩精品在在线一区二区中文| 国产精品久久久久久69| 亚洲精品一二| 久久久精品视频成人| 国产 中文 字幕 日韩 在线| 青青国产精品| 欧美午夜丰满在线18影院| 国产精品88久久久久久妇女| 欧洲一级在线观看| 国产成人免费在线观看不卡| 国产精品美女久久| 国产精久久久久久| 午夜av一区| 亚洲乱码一区av黑人高潮| 永久看看免费大片| 影视一区二区三区| 午夜欧美视频在线观看| 一区二区精品国产| 国产中文字幕在线| 成人97人人超碰人人99| 92福利视频午夜1000合集在线观看 | 在线综合视频网站| 欧美色图另类| av电影在线观看不卡| 亚洲一区二区三区毛片| 成人黄色片在线观看| 亚洲精品字幕| 九九视频这里只有精品| 日韩在线观看免| 精品国产一区二区三区香蕉沈先生| 精品成人在线观看| 精品人妻一区二区三区免费| 久久91视频| 欧洲精品一区二区| 欧美国产激情视频| 春色校园综合激情亚洲| 一区二区三区蜜桃| 在线观看17c| 国产传媒在线播放| 亚洲天堂免费在线观看视频| 亚洲一区二区不卡视频| 成年人视频在线观看免费| 久久久久国产精品人| 久久综合九色欧美狠狠| 日本成人一区| 99久久免费国产| 国产精品加勒比| 少妇无码一区二区三区| 懂色av一区二区三区免费看| 不卡视频一区二区| www.超碰在线.com| 粉嫩aⅴ一区二区三区四区| 国产精品美女诱惑| 天堂av网在线| 久久九九国产精品| 日本高清久久一区二区三区| 国产一区二区三区福利| 国产精品无遮挡| 中文字幕中文字幕99| 国产精品久久久久久福利| 国产精品国产三级国产普通话99| 亚洲最新在线| 美女写真理伦片在线看| 亚洲精品一卡二卡| 人体内射精一区二区三区| free性护士videos欧美| 日韩欧美黄色动漫| 一区二区xxx| 欧美h版在线观看| 亚洲成年人在线播放| 少妇精品一区二区| 欧美熟乱15p| 久久91精品国产91久久跳| 日本天堂在线视频| 日本美女一区二区三区| 91亚洲精品一区| 人人妻人人澡人人爽久久av| 久久久精品天堂| 欧洲美女和动交zoz0z| 欧美性受ⅹ╳╳╳黑人a性爽| 欧美日韩综合视频| 成人黄色一级大片| 精品av导航| 日韩在线激情视频| 国产精品6666| 久久精品国产亚洲一区二区三区| 成人羞羞视频免费| 福利视频在线导航| 亚洲自拍欧美精品| 国产高潮免费视频| 97青娱国产盛宴精品视频| 亚洲性av网站| 久久久久久久久久久久国产| 葵司免费一区二区三区四区五区| 成人久久精品视频| 欧美亚洲日本| 亚洲最大成人网4388xx| 欧美少妇性生活视频| 8x国产一区二区三区精品推荐| 亚洲男女性事视频| 免费在线观看亚洲| 麻豆视频观看网址久久| 久久一区二区精品| jizz性欧美10| 精品视频在线看| 99久久国产精| 欧美深夜福利| 91精品免费看| 美州a亚洲一视本频v色道| 一区二区三区免费观看| 老司机午夜性大片| 国产99久久久国产精品成人免费| 久久国产精品视频| 中文字幕在线观看第二页| 99久久精品国产导航| 国产乱子伦精品视频| 巨大黑人极品videos精品| 亚洲视频第一页| 97久久久久久久| 国产**成人网毛片九色 | 超碰免费公开在线| 欧美视频在线观看一区| 美女又爽又黄视频毛茸茸| 精久久久久久| www 成人av com| 国产理论在线观看| 欧美日韩国产三级| 波多野结衣家庭教师在线观看| 亚洲一区区二区| 国产欧美亚洲日本| 波多野结衣在线高清| 91精品国产色综合久久不卡电影| 成人无码精品1区2区3区免费看| 老牛嫩草一区二区三区日本 | 色婷婷亚洲mv天堂mv在影片| 国产成人精品在线播放| 青青国产在线| 色婷婷av一区二区三区大白胸| 亚洲天堂资源在线| 日韩视频久久| 久久青青草综合| 韩日成人影院| 亚洲全黄一级网站| 无码一区二区三区| 国产欧美日韩中文久久| 在线观看高清免费视频| 日本一区二区三区视频| 国产欧美在线观看| 成人影院www在线观看| 欧美一区二区黄| 妺妺窝人体色www聚色窝仙踪 | 亚洲啪啪91| 久久国产精品久久精品国产| 亚洲欧美se| 亚洲视频免费一区| 亚洲熟女乱色一区二区三区久久久| 国产精品系列在线| 亚洲18在线看污www麻豆| 久久精品青草| 国产精品一区视频网站| 亚洲天堂手机| 中文字幕一区二区精品| aaa一区二区| 亚洲6080在线| 国产又粗又猛又爽又黄av| 久久97超碰色| av在线播放天堂| 欧美热在线视频精品999| 国产精品美女久久久久av超清| 黄色动漫在线观看| 亚洲国产精品成人精品| 欧美人一级淫片a免费播放| 国产精品卡一卡二卡三| 国产精品19p| 午夜一区不卡| 一区国产精品| 美女一区二区在线观看| 国产精品v日韩精品| 日本成a人片在线观看| 亚洲成av人片在线观看香蕉| 亚洲av人无码激艳猛片服务器| 亚洲天天做日日做天天谢日日欢| 精品1卡二卡三卡四卡老狼| 日韩不卡一区二区| 免费国产成人看片在线| 日韩一级电影| 亚洲综合中文字幕68页| 欧美大片1688| 色综合天天综合网国产成人网| 美国一级片在线免费观看视频| 91精品福利在线一区二区三区| 国产九色在线播放九色| 伊人开心综合网| 免费网站在线高清观看| 床上的激情91.| 不用播放器的免费av| 久久久一二三| 欧美亚洲黄色片| 久久免费大视频| 裸体丰满少妇做受久久99精品| 成人永久在线| 国产精品久久久久久av下载红粉| 毛片在线网址| 久久国产精品影片| av电影在线观看一区二区三区| 亚洲成人网久久久| 99国产精品久久久久99打野战| 欧美日韩一区二区免费在线观看| 校园春色 亚洲| 国产精品久久久久影院色老大| 丰满少妇在线观看资源站| 国产成人av电影在线| 欧美美女一级片| 久热精品视频| 免费黄色日本网站| 亚洲调教视频在线观看| 日韩人妻精品一区二区三区| av伊人久久| 免费看成人午夜电影| 精品国产乱子伦一区二区| 99re在线观看视频| 国产精品视频一区二区三区综合 | 欧美大胆a视频| 午夜看片在线免费| 亚洲视频在线播放| 可以在线观看的黄色| 日韩成人高清在线| 婷婷综合激情网| 亚洲福利在线视频| 国产91绿帽单男绿奴| 日韩一区二区三区在线视频| 国产美女免费看| 8x8x8国产精品| 国产精品伦理一区| 777a∨成人精品桃花网| 91亚洲欧美激情| 91精品国产麻豆国产自产在线| 中文字幕久久熟女蜜桃| 欧美三级一区二区| 一区二区日韩在线观看| 欧美精品视频www在线观看| 中文字幕人妻一区二区在线视频| 欧美中文字幕不卡| 中文字幕欧美人妻精品| 欧美影院一区二区三区| 在线不卡免费视频| 欧美日韩成人高清| 99久久久久久久| 欧美大片日本大片免费观看| 丰满少妇高潮在线观看| 亚洲娇小xxxx欧美娇小| 四虎成人免费在线| 一本色道久久综合亚洲精品小说| 中文日本在线观看| 欧美成人精品在线播放| 免费在线国产视频| 91av在线不卡| 蜜桃成人精品| 91久久国产精品91久久性色| 日本成人手机在线| 精品午夜一区二区| 精品国产中文字幕第一页| 中文字幕99| 激情另类综合| aaaaaa亚洲| 国内精品写真在线观看| 深夜视频在线观看| 91亚洲精品久久久蜜桃网站 | 国产精品吊钟奶在线| 欧美午夜三级| 国产精成人品localhost| 日韩一级电影| 在线视频不卡一区二区| 怡红院精品视频在线观看极品| www一区二区www免费| 麻豆视频观看网址久久| 图片区偷拍区小说区| 日本一区二区三区在线观看| 日韩a级片在线观看| 日韩欧美成人精品| 96亚洲精品久久久蜜桃| 欧美精品一区二区三区四区| 成人高清网站| 欧美极品少妇xxxxⅹ免费视频| 日本免费久久| www.久久草| 成人在线国产| 麻豆tv在线播放| 久久成人免费日本黄色| 波多野结衣加勒比| 中文字幕一区二区三区av| 久草国产精品视频| 91精选在线观看| 欧洲成人av| 久久久久久久久久婷婷| 久久精品xxxxx| 久久综合九色综合久99| 亚洲综合色网| 亚洲高清在线免费观看| fc2成人免费人成在线观看播放| 99自拍偷拍视频| 欧美日韩国内自拍| 精品人妻无码一区二区三区蜜桃一 | 日韩电影免费| 欧美黄色片在线观看| 国产精品一区二区免费福利视频| 精品网站在线看| 欧美午夜一区| 免费网站在线观看黄| 中文字幕不卡三区| 在线天堂中文字幕| 日韩欧美不卡一区| 国产激情小视频在线| 国产精品7m视频| 一区三区在线欧| 日本少妇高潮喷水视频| 国产黄色精品网站| 男人av资源站| 欧美天堂亚洲电影院在线播放| 天堂√在线中文官网在线| 久久久久久久久亚洲| 白嫩亚洲一区二区三区| 在线不卡日本| 美女脱光内衣内裤视频久久影院| 亚洲a v网站| 日本高清免费不卡视频| 日本中文字幕电影在线观看| 久久久久久国产| 91麻豆精品激情在线观看最新 | 国产精品成人**免费视频| 日韩精品成人一区二区在线观看| 午夜一级在线看亚洲| 久久国产精品无码一级毛片| 亚洲成人免费视频| 天天干天天做天天操| 久久全球大尺度高清视频| 日韩免费成人| 日韩网站在线免费观看| 成人黄色网址在线观看| 日本免费一二三区| 日韩精品极品在线观看播放免费视频| 久久电影网站| 美脚丝袜一区二区三区在线观看| 西西人体一区二区| 日本少妇高潮喷水xxxxxxx| 91官网在线免费观看| av在线免费观看网| 国产日本欧美一区二区三区| 日韩在线视屏| 四虎1515hh.com| 亚洲成人tv网| 日本ー区在线视频| 国产精品最新在线观看| 99久久.com| 亚洲最大视频网| 日韩欧美精品在线观看| 国产免费视频在线| 成人动漫网站在线观看| 欧美1区3d| 天天插天天射天天干| 欧美性欧美巨大黑白大战| 欧美69xxx| 国产亚洲欧美一区二区| 久久亚洲精选| 欧美a级免费视频| 国产精品一区免费在线| 午夜探花在线观看| 成人一区二区三区| av黄色在线播放| 菠萝蜜影院一区二区免费| 精品国产一区二区三区性色av| 99久久免费观看| 91视频www| 国产又黄又粗又硬| 久久免费视频网| 欧美精品色图| 91aaa精品| 欧美日韩一区免费| 免费在线看a| 狠狠久久综合婷婷不卡| 免费精品99久久国产综合精品| 高h视频免费观看| 亚洲欧洲激情在线| 国产精品18| 无码播放一区二区三区| 国产精品久久久久久久久搜平片 | av漫画网站在线观看| 日本在线观看一区| 懂色av一区二区三区蜜臀| 国产美女www爽爽爽| 久久久久久综合网天天|