MyBatisPlus实现多表查询
在MyBatisPlus中实现多表查询,主要有以下几种方法:
-
使用注解进行多表查询: 你可以在Mapper接口中使用
@Select注解来编写SQL查询语句,实现多表查询。例如,如果你想根据用户ID查询用户信息和对应的区域名称,可以这样写:@Select("SELECT user.*, area.area_name FROM user, area WHERE user.area_id = area.id AND user.id = #{id}") User getUserById(int id);这种方法适用于简单的多表查询场景。
-
使用MyBatis-Plus Join扩展: MyBatis-Plus Join是一个扩展库,它提供了多表联查的能力。你可以通过配置Join条件来实现多表查询,这种方式更加灵活,适用于复杂的多表查询场景。
-
使用XML配置文件进行多表查询: 另一种方法是在Mapper的XML配置文件中定义多表查询的SQL语句。例如:
<mapper namespace="com.yourpackage.mapper.UserMapper"><resultMap id="userMap" type="com.yourpackage.model.UserVO"><result property="userName" column="name"/><result property="userAge" column="age"/><!-- 其他字段映射 --></resultMap><select id="selectUsers" resultMap="userMap">SELECT u.name, u.age, a.area_nameFROM t_user as uLEFT JOIN t_area as a ON u.area_id = a.id</select> </mapper>这种方式适用于需要复杂SQL逻辑和字段映射的场景。
-
动态查询(通过join): 使用MyBatis-Plus的动态SQL功能,可以在运行时构建多表查询。例如:
@Select("SELECT t_blog.*, t_user.* " +" FROM t_blog " +" LEFT JOIN t_user " +" ON t_blog.user_id = t_user.id " +" ${ew.customSqlSegment} ") IPage<BlogVO> findBlogByJoin(IPage<BlogVO> page, @Param("ew") Wrapper wrapper);这种方式适用于需要动态构建查询条件的场景。
以上方法可以根据你的具体需求和项目情况选择使用,每种方法都有其适用的场景和优势。
要使用MyBatis-Plus Join扩展(简称MPJ),你可以按照以下步骤进行操作:
-
引入依赖: 首先,你需要在你的项目中引入MyBatis-Plus-Join的依赖。如果你使用Maven,可以在
pom.xml文件中添加如下依赖:<!-- mybatis-plus-join --> <dependency><groupId>com.github.yulichang</groupId><artifactId>mybatis-plus-join</artifactId><version>1.1.6</version> </dependency>确保你的MyBatis-Plus版本大于等于3.4.0。
-
配置Mapper扫描: 在你的Spring Boot应用中,确保配置了Mapper接口的扫描路径:
@MapperScan("com.yourpackage.mapper") @SpringBootApplication public class YourApplication {public static void main(String[] args) {SpringApplication.run(YourApplication.class, args);} } -
使用MPJ进行多表查询: 在你的Mapper接口中,你可以使用MPJ提供的API来构建多表查询。以下是一个简单的例子,展示了如何使用MPJ进行多表联合查询:
@Override public List<ObOutPoolDto> queryByOrderNumber(String orderNumber){List<ObOutPoolDto> list = baseMapper.selectJoinList(ObOutPoolDto.class,mpjLambdaWrapper(MPJ(),new ObOutPoolItem() ,new String[0] ,Signal.ORDER.name,orderNumber));return list; } //基础连接查询MPJ对象 @Override public MPJLambdaWrapper<ObOutPoolDto> MPJ(){MPJLambdaWrapper<ObOutPoolDto> mpj = new MPJLambdaWrapper<ObOutPoolDto>().selectAll(ObOutPoolItem.class) //查询表1所有内容.selectAll(ObPool.class) //查询表2所有内容.leftJoin(ObPool.class,ObPool::getId,ObOutPoolItem::getPoolId) //左连接表1,条件为表1库存id 等于 表2 id.leftJoin(ObOutPool.class,ObOutPool::getDrawNumber,ObOutPoolItem::getDrawNumber); //左连接表2,用订单号匹配return mpj; }在这个例子中,
selectAll方法用于选择要查询的表的所有字段,leftJoin方法用于指定连接的表和连接条件。 -
执行查询: 使用构建好的MPJ对象执行查询,获取结果。MPJ提供了
selectJoinList和selectJoinListPage等方法来执行多表查询,并返回结果列表或分页结果。
通过以上步骤,你可以在你的项目中使用MyBatis-Plus Join扩展来实现多表关联查询。MPJ提供了一种简洁的方式来构建和执行多表查询,无需编写复杂的XML配置文件。
相关文章:
MyBatisPlus实现多表查询
在MyBatisPlus中实现多表查询,主要有以下几种方法: 使用注解进行多表查询: 你可以在Mapper接口中使用Select注解来编写SQL查询语句,实现多表查询。例如,如果你想根据用户ID查询用户信息和对应的区域名称,可…...
机器学习详解(5):MLP代码详解之MNIST手写数字识别
文章目录 1 MNIST数据集2 代码详解2.1 导入库和GPU2.2 MNIST数据集处理2.2.1 下载和导入2.2.2 张量(Tensors)2.2.3 准备训练数据 2.3 创建模型2.3.1 图像展开2.3.2 输入层2.3.3 隐藏层2.3.4 输出层2.3.5 模型编译 2.4 训练模型2.4.1 损失函数与优化器2.4.2 计算准确率2.4.3 训练…...
如何在vue中实现父子通信
1.需要用到的组件 父组件 <template><div id"app"><BaseCount :count"count" changeCount"cahngeCount"></BaseCount></div> </template><script> import BaseCount from ./components/BaseCount.v…...
PHP实现华为OBS存储
一:华为OBS存储文档地址 官方文档:https://support.huaweicloud.com/obs/index.html github地址:https://github.com/huaweicloud/huaweicloud-sdk-php-obs 二:安装华为OBS拓展 composer require obs/esdk-obs-php 三&#x…...
嵌入式 linux Git常用命令 抽补丁 打补丁
Git常用命令 为什么要学习git呢?我相信刚入门的小伙伴敲打肯定碰到过这种玄学问题,我明明刚刚还能用的代码,后面不知道咋的就不能用了,所以每次你调出一个功能点以后都会手动复制一份代码防止出问题,时间一长发现整个…...
Alan Chhabra:MongoDB AI应用程序计划(MAAP) 为客户提供价值
MongoDB全球合作伙伴执行副总裁 Alan Chhabra 每当有人向我问询MongoDB,我都会说他们很可能在不觉之间已经与MongoDB有过交集。事实上,包括70%财富百强在内的许多世界领先企业公司都在使用MongoDB。我们在MongoDB所做的一切都是为了服务客户,…...
【学习笔记】目前市面中手持激光雷达设备及参数汇总
手持激光雷达设备介绍 手持激光雷达设备是一种利用激光时间飞行原理来测量物体距离并构建三维模型的便携式高科技产品。它通过发射激光束并分析反射回来的激光信号,能够精确地获取物体的三维结构信息。这种设备以其高精度、适应各种光照环境的能力和便携性…...
Burp与小程序梦中情缘
前言 在日常渗透工作中,有时需要对微信小程序进行抓包渗透,通过抓包,我们可以捕获小程序与服务器之间的通信数据,分析这些数据可以帮助我们发现潜在的安全漏洞,本文通过讲述三个方法在PC端来对小程序抓包渗透 文章目…...
数据结构:Win32 API详解
目录 一.Win32 API的介绍 二.控制台程序(Console)与COORD 1..控制台程序(Console): 2.控制台窗口坐标COORD: 3.GetStdHandle函数: (1)语法: (2)参数: 4.GetConsoleCursorInf…...
迁移学习中模型训练加速(以mllm模型为例),提速15%以上
根据模型训练过程的显存占用实测的分析,一个1g参数的模型(存储占用4g)训练大约需要20g的显存,其中梯度值占用的显存约一半。博主本意是想实现在迁移学习(冻结部分参数)中模型显存占用的降低,结果不太满意,只能实现训练速度提升,但无法实现显存占用优化。预计是在现有的…...
socket编程UDP-实现停等机制(接收确认、超时重传)
在下面博客中,我介绍了利用UDP模拟TCP连接、按数据包发送文件的过程,并附上完整源码。 socket编程UDP-文件传输&模拟TCP建立连接脱离连接(进阶篇)_udp socket发送-CSDN博客 下面博客实现的是滑动窗口机制: sock…...
前端面试题目 (Node.JS-Express框架)[二]
在 Express 中如何使用 Passport.js 进行身份认证? Passport.js 是一个 Node.js 的身份验证中间件,它可以很容易地与 Express 集成。下面是一个简单的示例,展示了如何使用 Passport.js 进行基本的身份认证。 安装依赖 npm install express passport …...
防范TCP攻击:策略与实践
TCP(传输控制协议)是互联网通信的核心协议之一,它确保了数据在网络上的可靠传输。然而,TCP也容易成为各种网络攻击的目标,如SYN洪水攻击、TCP连接耗尽攻击等。本文将探讨如何通过配置防火墙规则、优化服务器设置以及采…...
3D 生成重建034-NerfDiff借助扩散模型直接生成nerf
3D 生成重建034-NerfDiff借助扩散模型直接生成nerf 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 感觉这个论文可能能shapE差不多同时期工作,但是shapE是生成任意种类。 本文提出了一种新颖的单图像视图合成方法NerfDiff,该方法利用神经辐射场 …...
分布式 Paxos算法 总结
前言 相关系列 《分布式 & 目录》《分布式 & Paxos算法 & 总结》《分布式 & Paxos算法 & 问题》 参考文献 《图解超难理解的 Paxos 算法(含伪代码)》《【超详细】分布式一致性协议 - Paxos》 Basic-Paxos 基础帕克索斯算法…...
我的宝贵经验
在技术的浩瀚海洋中,一份优秀的技术文档宛如精准的航海图。它是知识传承的载体,是团队协作的桥梁,更是产品成功的幕后英雄。然而,打造这样一份出色的技术文档并非易事。你是否在为如何清晰阐释复杂技术而苦恼?是否纠结…...
geoserver 瓦片地图,tomcat和nginx实现负载均衡
在地理信息系统(GIS)领域,GeoServer作为一个强大的开源服务器,能够发布各种地图服务,包括瓦片地图服务。为了提高服务的可用性和扩展性,结合Tomcat和Nginx实现负载均衡成为了一个有效的解决方案。本文将详细…...
Jenkins 启动 程序 退出后 被杀死问题
参考 Spawning Processes From Build (jenkins.io) 解决jenkins脚本启动项目后进程被杀死_jenkins杀进程-CSDN博客...
SEGGER | 基于STM32F405 + Keil - RTT组件01 - 移植SEGGER RTT
导言 RTT(Real Time Transfer)是一种用于嵌入式中与用户进行交互的技术,它结合了SWO和半主机的优点,具有极高的性能。 使用RTT可以从MCU非常快速输出调试信息和数据,且不影响MCU实时性。这个功能可以用于很多支持J-Link的设备和MCU࿰…...
分布式开发学习
1、kratos的特点 gRPC:Kratos 默认支持 gRPC,提供高性能的远程调用能力,适用于微服务间通信。 HTTP :同时支持 HTTP/1.1 和 HTTP/2,方便微服务与外部系统交互。 Protocol Buffers: protoc 工具生…...
新能源汽车,车载充电机仿真模型(基于PWM整流器)。输出功率3.3kw,前级PFC采用双闭环控制,电流畸变率小。后级采用移相全桥开环控制。 运行环境有matlab_simulink和plecs
新能源汽车,车载充电机仿真模型(基于PWM整流器)。输出功率3.3kw,前级PFC采用双闭环控制,电流畸变率小。后级采用移相全桥开环控制。 运行环境有matlab/simulink和plecs针对新能源汽车车载充电机(OBC&#x…...
终极指南:Helix Toolkit - 专业级.NET 3D图形框架完全解析
终极指南:Helix Toolkit - 专业级.NET 3D图形框架完全解析 【免费下载链接】helix-toolkit Helix Toolkit is a collection of 3D components for .NET. 项目地址: https://gitcode.com/gh_mirrors/he/helix-toolkit 你是否曾为.NET平台上的3D图形开发感到困…...
从Webgoat靶场实战看SQL注入:新手如何用PHPStudy快速搭建并复现经典攻击(附Java/ASP.NET防御代码)
从零构建Webgoat靶场:SQL注入攻防实战与安全编码指南 在Windows环境下使用PHPStudy快速搭建Webgoat靶场,是安全爱好者入门Web安全的高效路径。这个开源的Web应用安全测试平台,由OWASP组织维护,专门设计用于演示常见Web漏洞原理与防…...
基于Vue的社区医疗公益服务系统[vue]-计算机毕业设计源码+LW文档
摘要:随着社区医疗公益服务需求的不断增长,构建高效、便捷的管理系统成为提升服务质量的关键。本文介绍了一个基于Vue框架开发的社区医疗公益服务系统,详细阐述了其设计目标、技术架构、功能模块以及实现过程。该系统涵盖了系统用户管理、社区…...
用快马平台快速构建密码强度检测器,十分钟完成网络安全原型验证
今天想和大家分享一个快速验证网络安全功能的实战案例——用InsCode(快马)平台十分钟搭建密码强度检测器。作为经常需要处理用户注册功能的开发者,密码强度验证是每个项目都绕不开的基础安全需求,但传统开发流程中,光是搭环境、写基础代码就可…...
终极指南:Noria线程域调度机制如何实现5倍性能提升的无锁并发数据流处理
终极指南:Noria线程域调度机制如何实现5倍性能提升的无锁并发数据流处理 【免费下载链接】noria Fast web applications through dynamic, partially-stateful dataflow 项目地址: https://gitcode.com/gh_mirrors/no/noria Noria作为一款专注于动态部分状态…...
瑞斯康达Raisecom交换机VLAN与ERPS实战配置指南
1. 瑞斯康达交换机基础配置入门 第一次接触瑞斯康达交换机的朋友可能会被命令行界面吓到,其实它的操作逻辑和主流厂商设备非常相似。以Gazelle系列交换机为例,默认登录账号密码都是raisecom,这个设计对新手特别友好——至少不用像某些品牌设备…...
Whisper JAX时间戳功能:为语音内容添加精准时间标记的终极指南
Whisper JAX时间戳功能:为语音内容添加精准时间标记的终极指南 【免费下载链接】whisper-jax JAX implementation of OpenAIs Whisper model for up to 70x speed-up on TPU. 项目地址: https://gitcode.com/gh_mirrors/wh/whisper-jax Whisper JAX是OpenAI …...
告别Steam清单配置烦恼:Onekey智能配置工具的优雅解决方案
告别Steam清单配置烦恼:Onekey智能配置工具的优雅解决方案 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 作为游戏开发者或资深玩家,你是否曾因Steam游戏清单配置而头疼…...
人形机器人核心部件揭秘:减速器、传感器如何撑起宇树和智元的未来?
人形机器人核心部件揭秘:减速器与传感器的技术革命 当波士顿动力的Atlas完成后空翻,当特斯拉Optimus在工厂灵活抓取零件,这些看似科幻的场景背后,是无数精密部件协同工作的结果。人形机器人的核心部件——减速器和传感器ÿ…...
