mybatisplus的連表增強(qiáng)插件mybatis plus join
mybatis-plus作為mybatis的增強(qiáng)工具,它的出現(xiàn)極大的簡(jiǎn)化了開(kāi)發(fā)中的數(shù)據(jù)庫(kù)操作,但是長(zhǎng)久以來(lái),它的聯(liá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)表查詢了,話不多說(shuō),我們下面開(kāi)始體驗(yàn)。
插件文檔 https://mybatisplusjoin.com
插件Github倉(cāng)庫(kù) 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.4.1</version> </dependency> <!-- mp 依賴 --> <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 Long userId; ? ? private String city; ? ? private String address; ?? ?//地址列表 用于接下來(lái)的一對(duì)多映射查詢 ?? ?private List<Address> addressList; ?? ?//地址 用于接下來(lái)的一對(duì)一映射查詢 ?? ?private Address address; }
三、創(chuàng)建mapper
添加mapper并且繼承MPJBaseMapper
@Mapper public interface UserMapper extends MPJBaseMapper<User> { }
@Mapper public interface AddressMapper extends MPJBaseMapper<Address> { }
四、連表查詢測(cè)試
實(shí)體和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
控制臺(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)//查詢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ì)一映射查詢
五、一對(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)//查詢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)//查詢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的連表增強(qiáng)插件mybatis plus join的文章就介紹到這了,更多相關(guān)mybatis plus join內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Security和Shiro的相同點(diǎn)與不同點(diǎn)整理
在本篇文章里小編給大家整理的是關(guān)于Spring Security和Shiro的相同不同點(diǎn)整理,需要的朋友們可以參考下。2020-02-02Java新特性之Nashorn_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java新特性之Nashorn的相關(guān)資料,需要的朋友可以參考下2017-06-06Java開(kāi)發(fā)常見(jiàn)異常及解決辦法詳解
這篇文章主要介紹了java程序常見(jiàn)異常及處理匯總,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-09-09java中List刪除時(shí)需要的注意事項(xiàng)
最近在利用java中的LIST在刪除時(shí)發(fā)現(xiàn)了一個(gè)錯(cuò)我,通過(guò)查找相關(guān)的資料終于解決了,覺(jué)著有必要分享處理給同樣遇到這個(gè)問(wèn)題的朋友參考,下面這篇文章主要介紹了java中List刪除時(shí)需要的注意事項(xiàng),需要的朋友可以一起來(lái)看看吧。2017-01-01SpringBoot結(jié)合Redis實(shí)現(xiàn)序列化的方法詳解
Spring提供了一個(gè)RedisTemplate來(lái)進(jìn)行對(duì)Redis的操作,但是RedisTemplate默認(rèn)配置的是使用Java本機(jī)序列化。如果要對(duì)對(duì)象操作,就不是那么的方便。所以本文為大家介紹了另一種SpringBoot結(jié)合Redis實(shí)現(xiàn)序列化的方法,需要的可以參考一下2022-06-06SpringBoot統(tǒng)一返回處理出現(xiàn)cannot?be?cast?to?java.lang.String異常解決
這篇文章主要給大家介紹了關(guān)于SpringBoot統(tǒng)一返回處理出現(xiàn)cannot?be?cast?to?java.lang.String異常解決的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09BeanUtils.copyProperties()屬性名相同但是類(lèi)型不同問(wèn)題
這篇文章主要介紹了BeanUtils.copyProperties()屬性名相同但是類(lèi)型不同問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-09-09Spring的循環(huán)依賴、三級(jí)緩存解決方案源碼詳細(xì)解析
這篇文章主要介紹了Spring的循環(huán)依賴、三級(jí)緩存解決方案源碼詳細(xì)解析,在Spring中,由于IOC的控制反轉(zhuǎn),創(chuàng)建對(duì)象不再是簡(jiǎn)單的new出來(lái),而是交給Spring去創(chuàng)建,會(huì)經(jīng)歷一系列Bean的生命周期才創(chuàng)建出相應(yīng)的對(duì)象,需要的朋友可以參考下2024-01-01