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

news2025/2/1 5:52:16

使用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.coloradmin.cn/o/762956.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实训平台场景一(培训)

过程&#xff1a;黑客通过内网攻击拿到了web服务器的权限&#xff0c;然后发现还有邮件服务器&#xff0c;通过双网卡一些漏洞攻击进来之后&#xff0c;业务双网卡通内网&#xff0c;通过他拿到了内网服务器。 #使用御剑目录扫描 现在流量传感器里面上传和流量表&#xff0c;…

python 抓取页面图片并保存到本地

1 直接上代码了 下面再做说明 今天就拿抓取这个页面的这块的图片为例 https://sc.chinaz.com/tupian/beijingtupian_2.html #分页下载所有的图片 完整例子 参考文档 https://blog.csdn.net/Monster_No17/article/details/106277822 import requests,lxml,re #发出…

Linux网络基础 — 网络层

目录 IP协议 IP协议报头格式 网段划分 特殊的IP地址 IP地址的数量限制 私有IP地址和公网IP地址 路由 补充 网络层 在复杂的环境中确定一个合适的路径。 IP协议 ip具有将数据从 主机A 跨网络送到 主机B 的能力。 主机: 配有IP地址&#xff0c;但是不进行路由控制的设备…

AI实时交互和实时动捕驱动数字人各有何优势?企业该怎么选择?

在元宇宙时代下 虚拟数字人作为虚拟偶像、虚拟代言人 数字员工、虚拟主播等身份 逐渐出现于大众视野 品牌通过虚拟数字人 实现跨领域、跨圈层营销 虚拟数字人 到底是什么&#xff1f; 是企业赋予品牌的一个可视化虚拟形象 是通过长时间的经营&#xff0c;可以形成品牌资…

6!Xshell全版本密码一键恢复工具

工具介绍 Xshell全版本凭证一键恢复工具&#xff0c;针对Xshell全版本在本地保存的密码进行解密&#xff0c;包括最新的7系列版本&#xff0c;可自动寻找或指定Sessions路径。 关注【Hack分享吧】公众号&#xff0c;回复关键字【230608】获取下载链接 .\SharpXDecrypt.exe .\S…

西安丨高时空分辨率、高精度一体化预测技术之风、光、水能源自动化预测技术应用

目录 ​第一章 预测平台讲解及安装 第二章 一体化预测工具详解与数据获取及制备 第三章 风资源预测自动化技术 第四章 太阳能资源自动化预测技术 第五章 水资源自动化预测技术 第六章 后处理自动化技术 更多推荐 能源是国民经济发展和人民生活必须的重要物质基础。在过去…

怎样监控员工电脑在做什么?

随着科技的不断发展&#xff0c;越来越多的企业开始关注员工的工作效率和安全问题。为了确保员工的工作质量和保护企业的利益&#xff0c;监控员工的电脑屏幕成为一种常见的管理手段。 监控员工的电脑屏幕是一种现在大部分企业常见的管理手段&#xff0c;可以通过使用洞察眼MIT…

行业追踪,2023-07-17,静待减速器macd反转

自动复盘 2023-07-17 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

Ubuntu查找并安装指定版本包

命令如下: #查看指定包信息 apt-cache show kubeadm | grep 1.23.2 #安装指定版本 apt-get install kubeadm1.23.2-00

前端权限管理

一、概念 前端所谓的权限管理就是我们需要根据用户的角色不同来展示不同的内容&#xff0c;如下图所示&#xff1a; 超级管理员&#xff1a; vip会员&#xff1a; 游客&#xff1a; 像上面这样&#xff0c;根据用户的不同来展示不同的菜单栏。 二、实现思路 首先用户输入…

3GPP 中 规定V2X方案的性能要求

目录 1. 编队要求 2.高级驾驶性能要求 3.扩展传感器性能要求 4..远程驾驶性能要求 本文主要总结是将3GPP规定的V2X方案的性能要求&#xff0c;以做了解和参考。节选自5G核心网规划与应用 吴成林等编著&#xff0c;侵删。 1. 编队要求 &#xff08;1&#xff09;3GPP系统应…

【Linux】多线程(一)

文章目录 线程的概念线程优点线程缺点线程异常线程用途线程分离局部变量和全局变量互斥锁对锁的封装代码互斥量的接口互斥量实现原理探究可重入VS线程安全概念常见的线程不安全的情况 常见的线程安全的情况常见不可重入的情况常见可重入的情况可重入与线程安全联系可重入与线程…

「流失订单召回」AI功能上线,助力企业高效挽回潜客!

据QuestMobile《2020年第三季度中国移动互联网行业数据监测报告》统计&#xff0c;国内用户将商品放入购物车但最终未购买的情况占比高达69.8%&#xff0c;这无异是品牌业务的重大损失点。 用户将商品加入购物车代表着他们有一定的购买意向&#xff0c;但是被“遗弃”也意味着…

Jenkins极简体验

做研发运营一体化&#xff08;或者说运维&#xff09;的人员&#xff0c;对Jenkins一定不陌生。 这个工具在CI/CD链条中充当了大内总管的角色 很多时候&#xff0c;我们喜欢用抽象的概念描述一个东西。本来简简单单的一个工具或者一个软件甚至一个系统&#xff0c;往往被冠以各…

【Vue】day01-Vue基础入门

目录 day01 一、为什么要学习Vue 二、什么是Vue 1.什么是构建用户界面 2.什么是渐进式 Vue的两种开发方式&#xff1a; 3.什么是框架 总结&#xff1a;什么是Vue&#xff1f; 三、创建Vue实例 四、插值表达式 {{}} 1.作用&#xff1a;利用表达式进行插值&#xff0c…

python接口自动化(三十九)- logger 日志 - 上(超详解)

简介 Python的logging模块提供了通用的日志系统&#xff0c;可以方便第三方模块或者是应用使用。这个模块提供不同的日志级别&#xff0c;并可以采用不同的方式记录日志&#xff0c;比如文件&#xff0c;HTTP GET/POST&#xff0c;SMTP&#xff0c;Socket等&#xff0c;甚至可以…

给自己工作的箴言

箴言 目录概述需求&#xff1a; 设计思路实现思路分析工作箴言 性能参数测试&#xff1a; Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Survive.…

QT程序运行时依赖设置

本文主要解决Qt程序运行时容易遇到的两个问题&#xff1a; 找不到相关的Qt6Core.dll、Qt6Widgets.dll等库 这种情况下&#xff0c;把相关DLL所在目录添加到系统的环境变量 PATH 中&#xff0c;就可以了。 无法导入Qt相关的插件&#xff1a; qt.qpa.plugin: Could not find th…

高效的实时聊天利器:揭秘三个绝佳的网站聊天插件

实时聊天是连接用户与网站之间的纽带。传统的聊天方式已经逐渐不够满足用户的需求&#xff0c;如果不能快速跟用户交流以及快速解决用户问题&#xff0c;用户就容易跑掉&#xff0c;而网站聊天插件正好是实现实时聊天的必备工具。许多电子商务平台和网站都需要在聊天插件加持下…

[USACO06DEC] Milk Patterns G

目录 1.题目 2.思路 1.字典树(trie 树) 2.hash(正解) 1.有注释版 2. copy 版 3.后文 1.题目 Farmer John has noticed that the quality of milk given by his cows varies from day to day. On further investigation, he discovered that although he cant predict t…