MPJ多表连表查询(包含分页)

2023-11-23 15:50
文章标签 查询 分页 mpj 多表连表

本文主要是介绍MPJ多表连表查询(包含分页),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MPJ是mybatis plus join 的缩写,以前写多表查询时,一般都是写在配置文件,现在mybatis plus join 完全可以解放写xml文件,功能十分强大。
上代码,本文涉及五张表,连表查询从各个表拿出所需字段输出一条记录。
Device表:
在这里插入图片描述
device_category表
在这里插入图片描述
device_image表:
在这里插入图片描述
device_status表:
在这里插入图片描述
producer表:
在这里插入图片描述
项目工程结构:
在这里插入图片描述
1.首先引入MPJ插件

<dependency><groupId>com.github.yulichang</groupId><artifactId>mybatis-plus-join</artifactId><version>1.3.0</version></dependency>

2.配置config

@Configuration
public class MySqlInjector extends MPJSqlInjector {@Overridepublic List<AbstractMethod> getMethodList(Class<?> mapperClass) {//将原来的保持List<AbstractMethod> methodList = super.getMethodList(mapperClass);//多表查询sql注入 从连表插件里移植过来的methodList.add(new SelectJoinOne());methodList.add(new SelectJoinList());methodList.add(new SelectJoinPage());methodList.add(new SelectJoinMap());methodList.add(new SelectJoinMaps());methodList.add(new SelectJoinMapsPage());return methodList;}
}

mapper包

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
dto:

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@ApiModel(value = "DeviceInfoDto", description = "")
public class DeviceInfoDto implements Serializable {private static final long serialVersionUID = 1L;/** device表* */@ApiModelProperty("设备id")private Long id;/** device表* */@ApiModelProperty("设备名称")private String deviceName;/** device表* */@ApiModelProperty("设备序列号")private String serialNum;/** device表* */@ApiModelProperty("设备型号")private String modelNum;/** device_category表* */@ApiModelProperty("类别名称")private String categoryName;/** producer表* */@ApiModelProperty("设备产商")private String producer;/** device_status表* */@ApiModelProperty("设备状态值")private String statusValue;/** device_image表* */@ApiModelProperty("图片地址")private String imageUrl;
}

主启动:
在这里插入图片描述
测试代码:

 @Testvoid testJoin(){String status = "启动";/* MPJLambdaWrapper<Device> wrapper = MPJWrappers.<Device>lambdaJoin().select(Device::getId,Device::getDeviceName,Device::getSerialNum,Device::getModelNum).select(DeviceCategory::getCategoryName).select(Producer::getProducer).select(DeviceStatus::getStatusValue).select(DeviceImage::getImageUrl).leftJoin(DeviceCategory.class,on-> on.eq(Device::getCategoryId,DeviceCategory::getId)).leftJoin(Producer.class,on-> on.eq(Device::getProducerId,Producer::getId)).leftJoin(DeviceStatus.class,on-> on.eq(Device::getStatusId,DeviceStatus::getId)).leftJoin(DeviceImage.class,on->on.eq(Device::getId,DeviceImage::getDeviceId)).eq(Device::getCompanyId,1L).eq(!Objects.isNull(status),DeviceStatus::getStatusValue,status);List<Device> devices = deviceMapper.selectList(wrapper);*/IPage<DeviceInfoDto> page = deviceMapper.selectJoinPage(new Page<>(1,3),DeviceInfoDto.class,MPJWrappers.<Device>lambdaJoin().select(Device::getId,Device::getDeviceName,Device::getSerialNum,Device::getModelNum).select(DeviceCategory::getCategoryName).select(Producer::getProducer).select(DeviceStatus::getStatusValue).select(DeviceImage::getImageUrl).leftJoin(DeviceCategory.class,on-> on.eq(Device::getCategoryId,DeviceCategory::getId)).leftJoin(Producer.class,on-> on.eq(Device::getProducerId,Producer::getId)).leftJoin(DeviceStatus.class,on-> on.eq(Device::getStatusId,DeviceStatus::getId)).leftJoin(DeviceImage.class,on->on.eq(Device::getId,DeviceImage::getDeviceId)).eq(Device::getCompanyId,1L).eq(!Objects.isNull(status),DeviceStatus::getStatusValue,status));page.getRecords().forEach(System.out::println);}

运行结果:
在这里插入图片描述

这篇关于MPJ多表连表查询(包含分页)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/419026

相关文章

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优