MybatisPlus多表連接查詢的具體實現
mybatis-plus作為mybatis的增強工具,它的出現極大的簡化了開發(fā)中的數據庫操作,但是長久以來,它的聯表查詢能力一直被大家所詬病。一旦遇到left join或right join的左右連接,你還是得老老實實的打開xml文件,手寫上一大段的sql語句。
偶然碰到了這么一款叫做mybatis-plus-join的工具(后面就簡稱mpj了),使用了一下,不得不說真香!徹底將我從xml地獄中解放了出來,終于可以以類似mybatis-plus中QueryWrapper的方式來進行聯表查詢了,話不多說,我們下面開始體驗。
插件文檔 https://mybatisplusjoin.com
插件Github倉庫 https://github.com/yulichang/mybatis-plus-join
一、添加依賴
在pom中添加 mybatis plus join依賴
<!-- mpj 依賴 -->
<dependency>
<groupId>com.github.yulichang</groupId>
<artifactId>mybatis-plus-join-boot-starter</artifactId>
<version>1.4.5</version>
</dependency>
<!-- mp 依賴 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
二、創(chuàng)建實體
添加兩個數據庫實體類 User 和 Address 和結果類 UserDTO這里用lombok簡單代碼
@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關聯表中的兩個字段
private String city;
private String address;
//地址列表 用于接下來的一對多映射查詢
private List<Address> addressList;
//地址 用于接下來的一對一映射查詢
private Address address;
}
三、創(chuàng)建mapper
添加mapper并且繼承MPJBaseMapper
@Mapper
public interface UserMapper extends MPJBaseMapper<User> {
}
@Mapper
public interface AddressMapper extends MPJBaseMapper<Address> {
}
四、連表查詢測試
實體和mapper都建好了就可以直接用了~~
@SpringBootTest
public class SampleTest {
@Autowired
private UserMapper userMapper;
@Test
public void testSelect() {
MPJLambdaWrapper<User> wrapper = new MPJLambdaWrapper<User>()
.selectAll(User.class)//查詢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
控制臺輸出
User(id=1, name=Jone, age=18, email=test1@baomidou.com,city=北京,address=人民廣場)
User(id=2, name=Jack, age=20, email=test2@baomidou.com,city=上海,address=人民廣場)
User(id=3, name=Tom, age=28, email=test3@baomidou.com,city=廣州,address=人民廣場)
User(id=4, name=Sandy, age=21, email=test4@baomidou.com,city=上海,address=人民廣場)
User(id=5, name=Billie, age=24, email=test5@baomidou.com,city=北京,address=人民廣場)
連表分頁也是很常用的功能,MPJ也支持,調用selectJoinPage()就可以了
@SpringBootTest
public class SampleTest {
@Autowired
private UserMapper userMapper;
@Test
public void testSelect() {
MPJLambdaWrapper<User> wrapper = new MPJLambdaWrapper<User>()
.selectAll(User.class)//查詢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打印可以看到多了分頁方言
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 ?
小結:
通過以上幾個簡單的步驟,我們就實現了 User 表的連表功能,甚至連 XML 文件都不用編寫!
從以上步驟中,我們可以看到集成MyBatis-Plus-Join非常的簡單,只需要引入 starter 工程即可。
但 MyBatis-Plus-Join 的強大遠不止這些功能,
可以查閱插件文檔 https://mybatisplusjoin.com/接下來測試一對多和一對一映射查詢
五、一對多、一對一映射
一對多 selectCollection
@SpringBootTest
public class SampleTest {
@Autowired
private UserMapper userMapper;
@Test
public void testSelect() {
MPJLambdaWrapper<User> wrapper = new MPJLambdaWrapper<User>()
.selectAll(User.class)//查詢user表全部字段
.selectCollection(Address::getCity, UserDTO::getAddressList)
.leftJoin(Address.class, Address::getUserId, User::getId);
List<UserDTO> userList = userMapper.selectJoinList(UserDTO.class, wrapper);
}
}
一對一 selectAssociation
@SpringBootTest
public class SampleTest {
@Autowired
private UserMapper userMapper;
@Test
public void testSelect() {
MPJLambdaWrapper<User> wrapper = new MPJLambdaWrapper<User>()
.selectAll(User.class)//查詢user表全部字段
.selectAssociation(Address::getCity, UserDTO::getAddress)
.leftJoin(Address.class, Address::getUserId, User::getId);
List<UserDTO> userList = userMapper.selectJoinList(UserDTO.class, wrapper);
}
}
六、總結
通過以上幾個簡單的步驟,我們就實現了 User 表的連表功能,甚至連 XML 文件都不用編寫!
從以上步驟中,我們可以看到集成MyBatis-Plus-Join非常的簡單,只需要引入 starter 工程即可。
但 MyBatis-Plus-Join 的強大遠不止這些功能,想要詳細了解 MyBatis-Plus-Join 的強大功能?
可以查閱插件文檔 https://mybatisplusjoin.com/
到此這篇關于MybatisPlus多表連接查詢的具體實現的文章就介紹到這了,更多相關MybatisPlus多表連接查詢內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
深入淺析Random類在高并發(fā)下的缺陷及JUC對其的優(yōu)化
這篇文章主要介紹了Random類在高并發(fā)下的缺陷及JUC對其的優(yōu)化 ,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-04-04

