MybatisPlus多表連接查詢(xún)的具體實(shí)現(xiàn)
mybatis-plus作為mybatis的增強(qiáng)工具,它的出現(xiàn)極大的簡(jiǎn)化了開(kāi)發(fā)中的數(shù)據(jù)庫(kù)操作,但是長(zhǎng)久以來(lái),它的聯(lián)表查詢(xún)能力一直被大家所詬病。一旦遇到left join或right join的左右連接,你還是得老老實(shí)實(shí)的打開(kāi)xml文件,手寫(xiě)上一大段的sql語(yǔ)句。
偶然碰到了這么一款叫做mybatis-plus-join的工具(后面就簡(jiǎn)稱(chēng)mpj了),使用了一下,不得不說(shuō)真香!徹底將我從xml地獄中解放了出來(lái),終于可以以類(lèi)似mybatis-plus中QueryWrapper的方式來(lái)進(jìn)行聯(lián)表查詢(xún)了,話(huà)不多說(shuō),我們下面開(kāi)始體驗(yàn)。
插件文檔 https://mybatisplusjoin.com
插件Github倉(cāng)庫(kù) https://github.com/yulichang/mybatis-plus-join
一、添加依賴(lài)
在pom中添加 mybatis plus join依賴(lài)
<!-- mpj 依賴(lài) -->
<dependency>
<groupId>com.github.yulichang</groupId>
<artifactId>mybatis-plus-join-boot-starter</artifactId>
<version>1.4.5</version>
</dependency>
<!-- mp 依賴(lài) -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
二、創(chuàng)建實(shí)體
添加兩個(gè)數(shù)據(jù)庫(kù)實(shí)體類(lèi) User 和 Address 和結(jié)果類(lèi) UserDTO這里用lombok簡(jiǎn)單代碼
@Data
@ToString
@TableName("area")
public class User {
@TableId
private Long id;
private String name;
private Integer age;
private String email;
}
@Data
@ToString
@TableName("address")
public class Address {
@TableId
private Long id;
private Long userId;
private String city;
private String address;
}
@Data
@ToString
public class UserDTO{
private Long id;
private String name;
private Integer age;
private String email;
//address關(guān)聯(lián)表中的兩個(gè)字段
private String city;
private String address;
//地址列表 用于接下來(lái)的一對(duì)多映射查詢(xún)
private List<Address> addressList;
//地址 用于接下來(lái)的一對(duì)一映射查詢(xún)
private Address address;
}
三、創(chuàng)建mapper
添加mapper并且繼承MPJBaseMapper
@Mapper
public interface UserMapper extends MPJBaseMapper<User> {
}
@Mapper
public interface AddressMapper extends MPJBaseMapper<Address> {
}
四、連表查詢(xún)測(cè)試
實(shí)體和mapper都建好了就可以直接用了~~
@SpringBootTest
public class SampleTest {
@Autowired
private UserMapper userMapper;
@Test
public void testSelect() {
MPJLambdaWrapper<User> wrapper = new MPJLambdaWrapper<User>()
.selectAll(User.class)//查詢(xún)user表全部字段
.select(Address::getCity, Address::getAddress)
.leftJoin(Address.class, Address::getUserId, User::getId);
List<UserDTO> userList = userMapper.selectJoinList(UserDTO.class, wrapper);
userList.forEach(System.out::println);
}
}
sql打印
SELECT t.id,t.name,t.age,t.email,t2.city,t2.address FROM user t LEFT JOIN address t1 ON t1.user_id = t.id
控制臺(tái)輸出
User(id=1, name=Jone, age=18, email=test1@baomidou.com,city=北京,address=人民廣場(chǎng))
User(id=2, name=Jack, age=20, email=test2@baomidou.com,city=上海,address=人民廣場(chǎng))
User(id=3, name=Tom, age=28, email=test3@baomidou.com,city=廣州,address=人民廣場(chǎng))
User(id=4, name=Sandy, age=21, email=test4@baomidou.com,city=上海,address=人民廣場(chǎng))
User(id=5, name=Billie, age=24, email=test5@baomidou.com,city=北京,address=人民廣場(chǎng))
連表分頁(yè)也是很常用的功能,MPJ也支持,調(diào)用selectJoinPage()就可以了
@SpringBootTest
public class SampleTest {
@Autowired
private UserMapper userMapper;
@Test
public void testSelect() {
MPJLambdaWrapper<User> wrapper = new MPJLambdaWrapper<User>()
.selectAll(User.class)//查詢(xún)user表全部字段
.select(Address::getCity, Address::getAddress)
.leftJoin(Address.class, Address::getUserId, User::getId);
Page<UserDTO> page= userMapper.selectJoinPage(new Page(1,10), UserDTO.class, wrapper);
}
}
sql打印可以看到多了分頁(yè)方言
SELECT t.id,t.name,t.age,t.email,t2.city,t2.address FROM user t LEFT JOIN address t1 ON t1.user_id = t.id LIMIT ?
小結(jié):
通過(guò)以上幾個(gè)簡(jiǎn)單的步驟,我們就實(shí)現(xiàn)了 User 表的連表功能,甚至連 XML 文件都不用編寫(xiě)!
從以上步驟中,我們可以看到集成MyBatis-Plus-Join非常的簡(jiǎn)單,只需要引入 starter 工程即可。
但 MyBatis-Plus-Join 的強(qiáng)大遠(yuǎn)不止這些功能,
可以查閱插件文檔 https://mybatisplusjoin.com/接下來(lái)測(cè)試一對(duì)多和一對(duì)一映射查詢(xún)
五、一對(duì)多、一對(duì)一映射
一對(duì)多 selectCollection
@SpringBootTest
public class SampleTest {
@Autowired
private UserMapper userMapper;
@Test
public void testSelect() {
MPJLambdaWrapper<User> wrapper = new MPJLambdaWrapper<User>()
.selectAll(User.class)//查詢(xún)user表全部字段
.selectCollection(Address::getCity, UserDTO::getAddressList)
.leftJoin(Address.class, Address::getUserId, User::getId);
List<UserDTO> userList = userMapper.selectJoinList(UserDTO.class, wrapper);
}
}
一對(duì)一 selectAssociation
@SpringBootTest
public class SampleTest {
@Autowired
private UserMapper userMapper;
@Test
public void testSelect() {
MPJLambdaWrapper<User> wrapper = new MPJLambdaWrapper<User>()
.selectAll(User.class)//查詢(xún)user表全部字段
.selectAssociation(Address::getCity, UserDTO::getAddress)
.leftJoin(Address.class, Address::getUserId, User::getId);
List<UserDTO> userList = userMapper.selectJoinList(UserDTO.class, wrapper);
}
}
六、總結(jié)
通過(guò)以上幾個(gè)簡(jiǎn)單的步驟,我們就實(shí)現(xiàn)了 User 表的連表功能,甚至連 XML 文件都不用編寫(xiě)!
從以上步驟中,我們可以看到集成MyBatis-Plus-Join非常的簡(jiǎn)單,只需要引入 starter 工程即可。
但 MyBatis-Plus-Join 的強(qiáng)大遠(yuǎn)不止這些功能,想要詳細(xì)了解 MyBatis-Plus-Join 的強(qiáng)大功能?
可以查閱插件文檔 https://mybatisplusjoin.com/
到此這篇關(guān)于MybatisPlus多表連接查詢(xún)的具體實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)MybatisPlus多表連接查詢(xún)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Mybatis-Plus多表關(guān)聯(lián)查詢(xún)的使用案例解析
- MyBatis多表查詢(xún)和注解開(kāi)發(fā)案例詳解
- mybatis-plus多表分頁(yè)查詢(xún)最佳實(shí)現(xiàn)方法(非常簡(jiǎn)單)
- Mybatis-plus實(shí)現(xiàn)join連表查詢(xún)的示例代碼
- MyBatis中ResultMap與多表查詢(xún)的處理方法
- mybatis于xml方式和注解方式實(shí)現(xiàn)多表查詢(xún)的操作方法
- mybatis-plus多表查詢(xún)操作方法
- MyBatis?實(shí)現(xiàn)動(dòng)態(tài)排序的多表查詢(xún)
- 深入解析MybatisPlus多表連接查詢(xún)
- Mybatis分頁(yè)查詢(xún)主從表的實(shí)現(xiàn)示例
- mybatis連接數(shù)據(jù)庫(kù)實(shí)現(xiàn)雙表查詢(xún)
相關(guān)文章
一個(gè)簡(jiǎn)單的java學(xué)生寢室查詢(xún)系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了一個(gè)簡(jiǎn)單的java學(xué)生寢室查詢(xún)系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
Springboot實(shí)例講解實(shí)現(xiàn)專(zhuān)業(yè)材料認(rèn)證管理系統(tǒng)流程
這是一個(gè)基于java的畢業(yè)設(shè)計(jì)項(xiàng)目,畢設(shè)課題為springboot框架的知識(shí)產(chǎn)權(quán)服務(wù)平臺(tái)系統(tǒng),是一個(gè)采用b/s結(jié)構(gòu)的javaweb項(xiàng)目,需要的朋友可以參考下2022-06-06
詳解Java的Struts框架中上傳文件和客戶(hù)端驗(yàn)證的實(shí)現(xiàn)
這篇文章主要介紹了Java的Struts框架中上傳文件和客戶(hù)端驗(yàn)證的實(shí)現(xiàn),Struts是Java的SSH三大web開(kāi)發(fā)框架之一,需要的朋友可以參考下2015-12-12
Springboot整合多數(shù)據(jù)源代碼示例詳解
這篇文章主要介紹了Springboot整合多數(shù)據(jù)源代碼示例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
Java synchronized從使用到底層鎖升級(jí)機(jī)制詳解
本文深入解析Java中synchronized的底層機(jī)制與鎖升級(jí)過(guò)程,文章從基礎(chǔ)用法入手,區(qū)分實(shí)例鎖、類(lèi)鎖和代碼塊鎖的使用場(chǎng)景及常見(jiàn)誤區(qū),感興趣的朋友跟隨小編一起看看吧2026-03-03
關(guān)于在IDEA中SpringBoot項(xiàng)目中activiti工作流的使用詳解
這篇文章主要介紹了關(guān)于在IDEA中SpringBoot項(xiàng)目中activiti工作流的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08

