使用Mybatis-plus-join做多表查询

使用Mybatis-plus-join做多表查询

我们做多表查询都是要自己写sql的,还是比较麻烦的,下面介绍一种不用自己写sql的方式来完成多表查询。

这个第三方工具是一个大佬封装的一个jar包,即mybatis-plus-join架包,这个架包可以支持MyBatis-Plus的多表联查。

官网如下:https://mybatisplusjoin.com/

或者你看这个博主写的也行:https://blog.csdn.net/weixin_39555954/article/details/128217887

快速入门的使用

一、引依赖

注意:要求mybatis plus version >= 3.4.0

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

二、使用方法

mapper继承MPJBaseMapper (必选)
service继承MPJBaseService (可选)
serviceImpl继承MPJBaseServiceImpl (可选)

三、(实战)多表查询

MPJLambdaWrapper<Map> mpjLambdaWrapper = new MPJLambdaWrapper();
mpjLambdaWrapper.select(ChatRecord::getId,ChatRecord::getRedMoney).select(OfShopMembers::getUsablePoint).select(ChatMultiList::getName).leftJoin(OfShopMembers.class,OfShopMembers::getId,ChatRecord::getId).leftJoin(ChatMultiList.class,ChatMultiList::getId,ChatRecord::getMultiId).eq(ChatRecord::getMemberId,3213);
List list = chatRecordMybatisJoinMapper.selectJoinList(Map.class, mpjLambdaWrapper);

对应查询语句

SELECT t.id,t.red_money,t1.username,t2.name 
FROM chat_record t 
LEFT JOIN of_shop_members t1 ON (t1.id = t.id) 
LEFT JOIN chat_multi_list t2 ON (t2.id = t.multi_id) 
WHERE (t.member_id = 3213)

参数说明
1、select:表示查询的指定字段,一个select只能查一个表的
2、leftJoin:
第一个参数: 参与连表的实体类class
第二个参数: 连表的ON字段,这个属性必须是第一个参数实体类的属性
第三个参数: 参与连表的ON的另一个实体类属性
3、默认主表别名是t,其他的表别名以先后调用的顺序使用t1,t2,t3…

四、(实战)多表分页查询

MPJLambdaWrapper<Map> mpjLambdaWrapper = new MPJLambdaWrapper();mpjLambdaWrapper.select(ChatRecord::getId,ChatRecord::getRedMoney).select(OfShopMembers::getUsablePoint).select(ChatMultiList::getName).leftJoin(OfShopMembers.class,OfShopMembers::getId,ChatRecord::getId).leftJoin(ChatMultiList.class,ChatMultiList::getId,ChatRecord::getMultiId).eq(ChatRecord::getMemberId,3213).orderByDesc(ChatRecord::getAddTime);Page page = new Page(1,2);IPage<Map> mapIPage = chatRecordMybatisJoinMapper.selectJoinPage(page, Map.class, mpjLambdaWrapper);

对应查询语句

SELECT t.id,t.red_money,t1.usable_point,t2.name 
FROM chat_record t 
LEFT JOIN of_shop_members t1 ON (t1.id = t.id) 
LEFT JOIN chat_multi_list t2 ON (t2.id = t.multi_id)
WHERE (t.member_id = 3213) 
ORDER BY t.add_time 
DESC 
LIMIT 2

我的测试:

一、引入依赖

这里我们测试的项目使用的是3.4.1的mybatis-plus-boot-starter

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EzV800v1-1689579111867)(MyBatisPlus自定义sql/image-20230716181148224.png)]

我们进去看看里面指定的mybatis-plus的版本:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kFour6py-1689579111869)(MyBatisPlus自定义sql/image-20230716181234084.png)]

看到是3.4.1版本的mybatis-plus,所以可以放心引入依赖了。

引入好后如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0zcc5Elv-1689579111870)(MyBatisPlus自定义sql/image-20230716181350962.png)]

二、建表

我们新建三个表用来演示:

这三个表如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Eoh0RWx-1689579111870)(MyBatisPlus自定义sql/image-20230717092513762.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1kx5h2Xl-1689579111871)(MyBatisPlus自定义sql/image-20230717092533898.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oXvKjEWJ-1689579111872)(MyBatisPlus自定义sql/image-20230717092545652.png)]

三、新建实体类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eb1shnga-1689579111872)(MyBatisPlus自定义sql/image-20230717103553780.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XHRoQQh3-1689579111873)(MyBatisPlus自定义sql/image-20230717103612983.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tBJxc6vv-1689579111873)(MyBatisPlus自定义sql/image-20230717103634367.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wqiJB9bE-1689579111881)(MyBatisPlus自定义sql/image-20230717104016887.png)]

这个DTO里面写你要多表查询的全部数据。

四、新建dao层的接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d0fynB8g-1689579111883)(MyBatisPlus自定义sql/image-20230717143723744.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fevaf41r-1689579111884)(MyBatisPlus自定义sql/image-20230717143813308.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qzyb1znW-1689579111885)(MyBatisPlus自定义sql/image-20230717143824957.png)]

五、我们直接测试

测试一:多表查询

你可以把下面的测试代码当作service层的代码。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A8NzxPKA-1689579111887)(MyBatisPlus自定义sql/image-20230717143949138.png)]

结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5mbAA03Z-1689579111888)(MyBatisPlus自定义sql/image-20230717144026858.png)]

我们修改一下查询条件,看看结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7kmNlFNh-1689579111890)(MyBatisPlus自定义sql/image-20230717144136302.png)]

结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hpNnWmH4-1689579111893)(MyBatisPlus自定义sql/image-20230717144149992.png)]

测试二:多表分页查询

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CLBOA2PA-1689579111900)(MyBatisPlus自定义sql/image-20230717145108414.png)]

结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UUO29QYe-1689579111919)(MyBatisPlus自定义sql/image-20230717145205752.png)]

数据库我们执行sql的结果如下(下面的这个sql执行的时候是没有带分页的limit的):

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OQxmGIht-1689579111921)(MyBatisPlus自定义sql/image-20230717145449784.png)]

看到,两个一组,第一组里面就是id为4和id为5的数据。所以测试完全正确。

但是要注意:这里之前是配置了分页插件的,要是没有配置分页插件,上面的执行结果不会有分页效果的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xWLa3zih-1689579111922)(MyBatisPlus自定义sql/image-20230717145631612.png)]

测试三:多表分页查询且自定义别名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g2a3cN9o-1689579111923)(MyBatisPlus自定义sql/image-20230717151346435.png)]

结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hKDQSm2Y-1689579111925)(MyBatisPlus自定义sql/image-20230717151413394.png)]

测试四:多表查询分页且不把数据封装到实体类里面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5KNZ3Bui-1689579111927)(MyBatisPlus自定义sql/image-20230717152103699.png)]

结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hHAxhK87-1689579111930)(MyBatisPlus自定义sql/image-20230717152132917.png)]

测试五:多表分页查询,不封装到实体类,自定义别名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L0jsmO1m-1689579111931)(MyBatisPlus自定义sql/image-20230717153006733.png)]

结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FrnjXG8b-1689579111932)(MyBatisPlus自定义sql/image-20230717153050937.png)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/26294.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AWS MSK集群认证和加密传输的属性与配置

通常&#xff0c;身份认证和加密传输是两项不相关的安全配置&#xff0c;在Kafka/MSK上&#xff0c;身份认证和加密传输是有一些耦合关系的&#xff0c;重点是&#xff1a;对于MSK来说&#xff0c;当启用IAM, SASL/SCRAM以及TLS三种认证方式时&#xff0c;TLS加密传输是必须的&…

深入分析Spring的IoC容器:从底层源码探索

前言&#xff1a; 博主在最近的几次面试中&#xff0c;大中小厂都问到了Spring的ioc容器相关问题&#xff0c;这块知识确实是面试中的重点内容&#xff0c;因此结合所看的书籍&#xff0c;在这篇文章中总结下。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读&#xff0…

软件工程——第12章面向对象实现知识点整理

本专栏是博主个人笔记&#xff0c;主要目的是利用碎片化的时间来记忆软工知识点&#xff0c;特此声明&#xff01; 文章目录 1. 面向对象语言技术的特点&#xff1f; 2.选择面向对象程序设计语言时主要应该考虑哪些因素&#xff1f; 3.面向对象设计结果只能用面向对象语言实…

verilog实现led闪烁

文章目录 verilog实现led闪烁一、介绍二、代码三、仿真代码四、仿真结果五、总结 verilog实现led闪烁 一、介绍 使用verilog实现代码&#xff0c;实现led闪烁&#xff0c;每间隔200ms进行切换led灯 二、代码 module led (input wire clk,input wire rstn,output wire[3:0] …

【Spring Boot】Spring Boot的系统配置 — 实战:实现系统多环境配置

实战&#xff1a;实现系统多环境配置 在实际项目开发的过程中&#xff0c;需要面对不同的运行环境&#xff0c;比如开发环境、测试环境、生产环境等&#xff0c;每个运行环境的数据库、Redis服务器等配置都不相同&#xff0c;每次发布测试、更新生产都需要手动修改相关系统配置…

北邮国院物联网 Microprocessor 微处理器笔记

Introduction-随便聊 嵌入式系统是什么&#xff1f;专用的计算机系统。为专门功能可能对计算机架构&#xff0c;外设等做出一些取舍。 通常的限制&#xff1a;Cost&#xff08;比如大量部署传感器节点&#xff09;&#xff0c;Size and weight limits&#xff08;特定应用场景…

第 3 章 Spark 通讯架构

3.1 Spark 通信架构概述 3.1 Spark 通信架构概述 Spark 中通信框架的发展&#xff1a; ➢ Spark 早期版本中采用 Akka 作为内部通信部件。 ➢ Spark1.3 中引入 Netty 通信框架&#xff0c;为了解决 Shuffle 的大数据传输问题使用 ➢ Spark1.6 中 Akka 和 Netty 可以配置使用。…

使用HummerRisk进行K8s安全合规检测

1.简介 HummerRisk 是开源的云原生安全平台&#xff0c;以非侵入的方式解决云原生的安全和治理问题。核心能力包括混合云的安全治理和云原生安全检测。 今天我们来通过 HummerRisk 云原生安全检测能力来对Kubernetes进行安全合规检测 2.检测步骤 ①首先创建一个Kubernetes账…

浅谈无线温度监控系统在低功耗开关柜中的应用

安科瑞 华楠 摘要&#xff1a;为了能够实现实时监测高压开关柜的温度状况&#xff0c;提出一种基于无线传感器网络的开关柜温度在线监测系统。设计的无线温度在线监测系统不仅解决了开关柜内高温、高压、强电磁感应等在恶劣环境下不易检测的问题&#xff0c;而且从硬件选择和软…

【Linux】生产者消费者模型 -- RingQueue

文章目录 1. 生产者消费者模型的理解1.1 生产者消费者模型的概念1.2 生产者消费者模型的特点1.3 生产者消费者模型的优点 2. 基于BlockQueue的生产者消费者模型 1. 生产者消费者模型的理解 1.1 生产者消费者模型的概念 生产者消费者模型就是通过一个容器来解决生产者和消费者的…

机器学习31:《推荐系统-IV》深度神经网络DNN

在《机器学习29&#xff1a;《推荐系统-II》协同过滤》一文中&#xff0c;笔者介绍了如何使用矩阵分解来学习嵌入。矩阵分解具有一些局限性&#xff1a; 基础矩阵分解只用了 UserID&#xff08;QueryID&#xff09; 和 ItemID 两个维度的信息&#xff0c;所有学到的知识都蕴含在…

包管理工具:npm、yarn、cnpm、npx、pnpm

yarn&#xff1a;  yarn是由Facebook(react)、Google、Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具&#xff1b;  yarn 是为了弥补早期npm 的一些缺陷而出现的&#xff1b;  早期的npm存在很多的缺陷&#xff0c;比如安装依赖速度很慢、版本依赖混乱等等一系列…