mybatisplus的连表增强插件mybatis plus join

 更新时间:2023年06月08日 11:14:21   作者:bjdiys  
本文主要介绍了mybatisplus的连表增强插件mybatis plus join,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

mybatis-plus作为mybatis的增强工具,它的出现极大的简化了开发中的数据库操作,但是长久以来,它的联表查询能力一直被大家所诟病。一旦遇到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.4.1</version>
</dependency>
<!-- mp 依赖 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>

二、创建实体

添加两个数据库实体类 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 Long userId;
    private String city;
    private String address;
    //地址列表 用于接下来的一对多映射查询
    private List<Address> addressList;
    //地址 用于接下来的一对一映射查询
    private Address address;
}

三、创建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的连表增强插件mybatis plus join的文章就介绍到这了,更多相关mybatis plus join内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中throw和throws异常处理完整例子说明

    Java中throw和throws异常处理完整例子说明

    这篇文章主要给大家介绍了关于Java中throw和throws异常处理的相关资料, throw关键字是用于在方法内抛出异常,而throws关键字是在方法声明中指定可能抛出的异常,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • 配置hadoop环境mapreduce连接不上hdfs解决

    配置hadoop环境mapreduce连接不上hdfs解决

    这篇文章主要为大家介绍了配置hadoop环境mapreduce连接不上hdfs解决方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • java实现象棋小游戏

    java实现象棋小游戏

    这篇文章主要为大家详细介绍了java实现象棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • 一文彻底搞懂Java中的回调函数

    一文彻底搞懂Java中的回调函数

    回调是一种常见的编程模式,允许一个函数在特定事件或任务完成后,调用另一个预先定义的函数,这篇文章主要介绍了Java中回调函数的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-01-01
  • MyBatis关联查询的实现

    MyBatis关联查询的实现

    MyBatis可以通过定义多个表的关联关系,实现多表查询,本文主要介绍了MyBatis关联查询的实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • JavaEE微框架Spring Boot深入解读

    JavaEE微框架Spring Boot深入解读

    spring框架作为JavaEE框架领域的一款重要的开源框架,在企业应用开发中有着很重要的作用。接下来通过本文给大家介绍JavaEE微框架Spring Boot深入解读,需要的朋友可以参考下
    2017-04-04
  • SpringBoot集成MinIO实现分布式文件存储与管理方式

    SpringBoot集成MinIO实现分布式文件存储与管理方式

    这篇文章主要介绍了SpringBoot集成MinIO实现分布式文件存储与管理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-09-09
  • Maven依赖管理之parent与dependencyManagement深入分析

    Maven依赖管理之parent与dependencyManagement深入分析

    首先我们来说说parent标签,其实这个不难解释,就是父的意思,pom也有继承的。比方说我现在有A,B,C,A是B,C的父级。现在就是有一个情况B,C其实有很多jar都是共同的,其实是可以放在父项目里面,这样,让B,C都继承A就方便管理了
    2022-10-10
  • mybatis 无参构造器的使用

    mybatis 无参构造器的使用

    本文主要介绍了MyBatis中无参构造器的重要性和应用,无参构造器在Java类中具有特殊的意义,它确保了即使在没有提供任何参数的情况下,也能够创建对象并对其进行初始化,下面就来介绍一下
    2024-10-10
  • Java中成员方法与成员变量访问权限详解

    Java中成员方法与成员变量访问权限详解

    在Java学习过程中,在写类经常为用到public,private和protected,我个人的经验是一般类的成员变量都是用private,方法用public,类的内部用protected方法,如果是存在子类的,那我就会把父类中的成员变量变为protected。(其余的看具体实际情 况而定)
    2015-08-08

最新评论