首页 > 其他分享 >mybatis plus多表查询的扩展

mybatis plus多表查询的扩展

时间:2024-09-14 21:51:16浏览次数:3  
标签:插件 多表 查询 plus User Address mybatis class

mybatis plus提供了简单的CURD操作,但是有时我们的业务需要要求进行多表查询,这个时候,我们就需要加入多表查询的扩展了。

 mybatis-plus-join,基于mybatis-plus的所有优点,然后还支持连表查询,还支持一对多,一对一的查询。

mybatis-plus-join是mybatis plus的一个多表插件,上手简单,几分钟就能学会全部使用方式。行了废话不多说直接看代码吧。

插件文档 https://mybatisplusjoin.com

插件Github仓库 https://github.com/yulichang/mybatis-plus-join

一、安装插件

在pom中添加依赖


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


二、Mapper

MybatisPlus Join提供了MPJBaseMapper,继承BaseMapper,继承了原本的功能提供了关联查询的功能。

将实体mapper有Mybatis plus的改成插件的

@Mapper
public interface UserMapper extends MPJBaseMapper<UserDO> {

}


三、使用方法

简单的连表查询

查询 user 表全部字段address表的 city、address字段


public class SampleTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testSelect() {
        MPJLambdaWrapper<User> wrapper = JoinWrappers.lambda(User.class)
                .selectAll(User.class)//查询user表全部字段
                .select(Address::getCity, Address::getAddress)
                .leftJoin(Address.class, Address::getUserId, User::getId);

        List<UserDTO> userList = userMapper.selectJoinList(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

通过以上几个简单的步骤,我们就实现了 User 表的连表功能,甚至连 XML 文件都不用编写!

从以上步骤中,我们可以看到集成MyBatis-Plus-Join非常的简单,只需要引入 starter 工程即可。

但 MyBatis-Plus-Join 的强大远不止这些功能,全部功能请参考 插件文档 https://mybatisplusjoin.com

分页查询

mybatis plus join插件支持mybatis plus原生的插件

public class SampleTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testSelect() {
        MPJLambdaWrapper<User> wrapper = JoinWrappers.lambda(User.class)
                .selectAll(User.class)//查询user表全部字段
                .select(Address::getCity, Address::getAddress)
                .leftJoin(Address.class, Address::getUserId, User::getId);
  //分页查询 只需调用selectJoinPage方法,传入Mybatis Plus的page对象就行了
        Page<UserDTO> page = userMapper.selectJoinPage(new Page<>(1, 10), UserDTO.class, wrapper);
    }
}


对应sql

我这用的是Mysql,会添加 Limit, 分页插件会更具不同数据库拼接不同的分页方言

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 ?


一对多查询

对多查询也很方便,只需调用selectCollection就行了, 对多查询需要List集合作为映射字段类型


public class SampleTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testSelect() {
        MPJLambdaWrapper<User> wrapper = JoinWrappers.lambda(User.class)
                .selectCollection(AddressDO.class, UserDTO::getAddressList)
                .leftJoin(Address.class, Address::getUserId, User::getId);
  
        List<UserDTO> list= userMapper.selectJoinList(UserDTO.class, wrapper);
    }
}


一对一查询

一对一查询和对多查询用法一模一样, 把selectCollection换成selectAssociation就行了, 映射字段就不能是集合了,改成对应的实体类或DTO类


public class SampleTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testSelect() {
        MPJLambdaWrapper<User> wrapper = JoinWrappers.lambda(User.class)
                .selectAssociation(AddressDO.class, UserDTO::getAddressDto)
                .leftJoin(Address.class, Address::getUserId, User::getId);
  
        List<UserDTO> list= userMapper.selectJoinList(UserDTO.class, wrapper);
    }
}


通过以上几个简单的步骤,我们就实现了 User 表的一对一和一对多功能,甚至连 XML 文件都不用编写!

插件还支持指定字段映射,指定别名映射,嵌套映射等强大的功能, 全部功能请参考 插件文档 https://mybatisplusjoin.com


四、总结

无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑无感引入, 支持MP风格的查询, 您会MP就会MPJ, 无需额外的学习成本兼容MP的别名、逻辑删除、枚举列、TypeHandle列等特性

全部功能请参考 插件文档 https://mybatisplusjoin.com

如果您在使用过程中有任何问题或疑问,欢迎提issue或通过Github或Gitee咨询作者




标签:插件,多表,查询,plus,User,Address,mybatis,class
From: https://blog.51cto.com/tntxia/12019025

相关文章

  • cpp primer plus 第七章
    7.1函数基本知识7.1.1定义函数函数分为两类:有返回值与无返回值的函数。对于有返回值的函数,必须使用返回语句,将值返回给调用函数。若函数包含多条返回语句,则函数在执行第一条返回语句后结束。7.1.2函数原型声明函数如果在main函数后方,则在前面声明函数(复制函数定义中的......
  • SpringBoot:Web开发(基于SpringBoot使用MyBatis-Plus+JSP开发)
    目录前期准备构建项目(IDEA2023.1.2,JDK21,SpringBoot3.3.3)添加启动器Model准备这里我们利用MybatisX插件生成我们所需要的实体类、数据访问层以及服务层注意选择MyBatis-Plus3以及Lombok然后再在service接口中定义我们所需要的方法以及实现类(利用MyBatis-Plus省去我们......
  • 尤雨溪推荐的拖拽插件,支持Vue2/Vue3 VueDraggablePlus
    大家好,我是「前端实验室」爱分享的了不起~今天在网上看到尤雨溪推荐的这款拖拽组件,试了一下非常不错,这里推荐给大家。说到拖拽工具库,非大名鼎鼎的的Sortablejs莫属。它是前端领域比较知名的,且功能强大的工具。但我们直接使用Sortablejs的情况很少,一般都是使用基于它的......
  • 深入解析 MyBatis:从理论到项目实例
    深入解析MyBatis:从理论到项目实例目录MyBatis概述MyBatis项目结构及作用核心概念详解分页功能的实现与深入剖析动态SQL缓存机制详解与Spring集成常见问题与深入分析完整项目示例总结1.MyBatis概述MyBatis是一个轻量级的持久层框架,使用SQL查询语句来访问数据......
  • MyBatis 注解式开发:简洁高效的数据库访问新方式
    文章目录一、MyBatis简介二、注解式开发的优势三、MyBatis注解式开发的基本用法四、MyBatis常用注解介绍五、复杂查询的实现六、总结在Java开发中,MyBatis是一个非常流行的持久层框架,它提供了一种灵活、高效的方式来访问数据库。除了传统的XML配置方式,MyBatis......
  • Python爬虫案例七:抓取南京公交信息数据并将其保存成excel多表形式
    测试链接:        https://nanjing.8684.cn/line4 思路:先抓取某个类型下的某一条线路所有数据,然后实现批量,,列举出三个类型代表既可源码:fromlxmlimportetreefromxlutils.copyimportcopyimportrequests,os,xlrd,xlwtdefget_all():#获取所......
  • Mybatis入门程序-实现对用户的增删改查
    目录1、MyBatis入门程序——查询用户方法一方法二2、MyBatis入门程序——添加用户3、MyBatis入门程序——更新用户4、MyBatis入门程序——删除用户1、MyBatis入门程序——查询用户实现根据用户名模糊查询用户查询sql:SELECT*FROM`user`WHEREu......
  • 标准的vue3 elementplus格式,不用export default
    <template><div><!--查询表单--><el-form:inline="true":model="filters"class="demo-form-inline"><el-form-itemlabel="产品料号"><el-inputv-model="filters.......
  • MyBatis 3种 使用 SQL 语句的方式;注解方式、注解提供器方式、XML 配置方式
    结论:为了统一使用方式,建议采用XML配置的方式;MyBatis提供了多种配置和使用SQL语句的方式,主要包括:注解方式(如@Select)、注解提供器方式(如@SelectProvider)和XML配置方式。每种方式都有其独特的优缺点,适用于不同的场景。以下是这三种方式的详细对比:1.@Select这类注解优点:......
  • mybatis exists 中使用代替in关键字
      使用场景,in适合数据量小的时候,exists适合数据量大的时候。<iftest="torqueRecordPageDTO.vinList!=nullandtorqueRecordPageDTO.vinList.size>0">andexists(select1from(<foreachcollection="......