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

相关文章

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

一文教你使用Python实现本地分页

《一文教你使用Python实现本地分页》这篇文章主要为大家详细介绍了Python如何实现本地分页的算法,主要针对二级数据结构,文中的示例代码简洁易懂,有需要的小伙伴可以了解下... 在项目开发的过程中,遇到分页的第一页就展示大量的数据,导致前端列表加载展示的速度慢,所以需要在本地加入分页处理,把所有数据先放

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

Redis存储的列表分页和检索的实现方法

《Redis存储的列表分页和检索的实现方法》在Redis中,列表(List)是一种有序的数据结构,通常用于存储一系列元素,由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能,... 目录一、Redis 列表的基本操作二、分页实现三、检索实现3.1 方法 1:客户端过滤3.2 方法

MYSQL关联关系查询方式

《MYSQL关联关系查询方式》文章详细介绍了MySQL中如何使用内连接和左外连接进行表的关联查询,并展示了如何选择列和使用别名,文章还提供了一些关于查询优化的建议,并鼓励读者参考和支持脚本之家... 目录mysql关联关系查询关联关系查询这个查询做了以下几件事MySQL自关联查询总结MYSQL关联关系查询

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下

查询Oracle数据库表是否被锁的实现方式

《查询Oracle数据库表是否被锁的实现方式》本文介绍了查询Oracle数据库表是否被锁的方法,包括查询锁表的会话、人员信息,根据object_id查询表名,以及根据会话ID查询和停止本地进程,同时,... 目录查询oracle数据库表是否被锁1、查询锁表的会话、人员等信息2、根据 object_id查询被

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用