使用Mybaitis-plus提供的各种的免写SQL的Wrapper的使用方式
文章目录
- 内连接
- JoinWrappers.lambda和 new MPJLambdaWrapper 生成的MPJLambdaWrapper对象有啥区别?
- LambdaQueryWrapper 和 QueryWrapper的区别?
- LambdaQueryWrapper和MPJLambdaQueryWrapper的区别?
- 在作单表更新时建议使用:LambdaUpdateWrapper
- MPJLambdaWrapper和MPJLambdaQueryWrapper的区别?
- 三表联查的情况
- 做删除操作时
内连接
代码:
MPJLambdaWrapper<ToolsMenu> menuJoinWrapper = JoinWrappers.lambda("m1",ToolsMenu.class);//这里的m1 表示inner join 前面的表的别名menuJoinWrapper.selectAll(ToolsMenu.class,"m1");menuJoinWrapper.innerJoin(ToolsMenu.class,"m2",ToolsMenu::getMenuId,ToolsMenu::getMenuParentId);//这里的m2 表示inner join 后面的表的别名menuJoinWrapper.eq("m2",ToolsMenu::getMenuCode, "tenantManagement");final List<ToolsMenu> list = this.list(menuJoinWrapper);
解析后的SQL语句如下:
SELECTm1.MENU_ID,m1.menu_code,m1.menu_name,m1.menu_describe,m1.menu_parent_id,m1.menu_type,m1.create_date,m1.update_date,m1.menu_order,m1.menu_url,m1.dir_or_menu,m1.is_show,m1.create_user,m1.update_user
FROMTOOLS_MENU m1INNER JOIN TOOLS_MENU m2 ON ( m2.MENU_ID = m1.menu_parent_id )
WHERE( m2.menu_code = ? )
其他的左连接,右连接类似上面的写法。
JoinWrappers.lambda和 new MPJLambdaWrapper 生成的MPJLambdaWrapper对象有啥区别?
MPJLambdaWrapper<ToolsLogin> wrapper = new MPJLambdaWrapper<ToolsLogin>();
MPJLambdaWrapper<ToolsLogin> wrapper = JoinWrappers.lambda(ToolsLogin.class);

LambdaQueryWrapper 和 QueryWrapper的区别?

LambdaQueryWrapper和MPJLambdaQueryWrapper的区别?

在作单表更新时建议使用:LambdaUpdateWrapper
LambdaUpdateWrapper<KldModel> wrapper = new LambdaUpdateWrapper<>();wrapper.eq(KldModel::getOwnId, id).set(KldModel::getIsDelete, 1);kldModelService.update(wrapper);
优点:1.可以指定更新的where条件,2.可以通过特有的set方法有针对性只更新某一个或多个字段
MPJLambdaWrapper和MPJLambdaQueryWrapper的区别?

举例:
userJoinWrapper.select(ToolsUser::getUserId,ToolsUser::getUserName,ToolsUser::getSex,ToolsUser::getEmpId,ToolsUser::getPhoneNumber,ToolsUser::getRoleCode).select(ToolsTenantUserRelation::getTenantUserRelationId);
// .selectAs(ToolsTenantUserRelation::getTenantUserRelationId,"tenantUserRelationId");//也可以给字段起别名userJoinWrapper.leftJoin(ToolsTenantUserRelation.class,ToolsTenantUserRelation::getUserId,ToolsUser::getUserId);userJoinWrapper.eq(ToolsTenantUserRelation::getTenantId, tenantId);
对应的SQL:
SELECTt.USER_ID,t.user_name,t.sex,t.emp_id,t.phone_number,t.role_code,t1.TENANT_USER_RELATION_ID
FROMTOOLS_USER tLEFT JOIN TOOLS_TENANT_USER_RELATION t1 ON ( t1.user_id = t.USER_ID )
WHERE( t1.tenant_id = ? )
//这样可以查到不同表里的字段,此时使用MPJLambdaQueryWrapper就不行,必须使用MPJLambdaWrapper来复杂关联查询。
三表联查的情况
MPJLambdaWrapper<ToolsUser> userJoinWrapper= JoinWrappers.lambda();userJoinWrapper.select(ToolsUser::getUserId,ToolsUser::getUserName,ToolsUser::getSex,ToolsUser::getEmpId,ToolsUser::getPhoneNumber,ToolsUser::getRoleCode).select(ToolsRole::getRoleName).select(ToolsTenantUserRelation::getTenantUserRelationId);
// .selectAs(ToolsTenantUserRelation::getTenantUserRelationId,"tenantUserRelationId");//也可以给字段起别名userJoinWrapper.leftJoin(ToolsRole.class,ToolsRole::getRoleCode,ToolsUser::getRoleCode);userJoinWrapper.leftJoin(ToolsTenantUserRelation.class,ToolsTenantUserRelation::getUserId,ToolsUser::getUserId);userJoinWrapper.eq(ToolsTenantUserRelation::getTenantId, tenantId);
对应的SQL语句如下:
SELECTt.USER_ID,t.user_name,t.sex,t.emp_id,t.phone_number,t.role_code,t1.role_name,t2.TENANT_USER_RELATION_ID
FROMTOOLS_USER tLEFT JOIN TOOLS_ROLE t1 ON ( t1.role_code = t.role_code )LEFT JOIN TOOLS_TENANT_USER_RELATION t2 ON ( t2.user_id = t.USER_ID )
WHERE( t2.tenant_id = 1 ) LIMIT 10
这样可以把role_tool、tools_tenant_user_relation、tools_user表里的想要的数据都可以返回了。

做删除操作时
// DeleteJoinWrapper<ToolsLogin> deleteQuery = JoinWrappers.delete(ToolsLogin.class); //推荐的方式(首推)
// LambdaQueryWrapper<ToolsLogin> deleteQuery = new LambdaQueryWrapper<>(); //不推荐,但是也可以MPJLambdaWrapper<ToolsLogin> deleteQuery = new MPJLambdaWrapper<>();//推荐的方式deleteQuery.lt(ToolsLogin::getExpireTime, expireTime.getTime());loginService.remove(deleteQuery);
但是需要注意一点的是:在做删除时,千万注意不要添加以下的内容:
// deleteQuery.select();//可能是在其他地方拷贝过来的。注意一定要删掉
// deleteQuery.selectAll();//可能是在其他地方拷贝过来的 。注意一定要删掉
所以建议使用DeleteJoinWrapper做删除,因为它里面不涉及select或者selectAll方法,因为它是专为做删除定制的。
相关文章:
使用Mybaitis-plus提供的各种的免写SQL的Wrapper的使用方式
文章目录 内连接JoinWrappers.lambda和 new MPJLambdaWrapper 生成的MPJLambdaWrapper对象有啥区别?LambdaQueryWrapper 和 QueryWrapper的区别?LambdaQueryWrapper和MPJLambdaQueryWrapper的区别?在作单表更新时建议使用:LambdaU…...
springboot-基于Web企业短信息发送系统(源码+lw+部署文档+讲解),源码可白嫖!
摘要 当今社会已经步入了科学技术进步和经济社会快速发展的新时期,国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。本系统采用B/S架构,数据库是MySQL…...
秀丸编辑器 使用技巧
参考资料 第II部〜知っていると便利な秀丸の機能 検索テキストファイルの16進表示について秀丸エディタヘルプ目次秀丸エディタQ&A集(第9.6版)(HTML 形式)テンプレート(Ver9.43対応版) 目录 零…...
什么是量子计算?它能做什么?
抛一枚硬币。要么正面朝上,要么反面朝上,对吧?当然,那是在我们看到硬币落地的结果之后。但当硬币还在空中旋转时,它既不是正面也不是反面,而是正面和反面都有一定的可能性。 这个灰色地带就是量子计算的简…...
Python Web开发常用框架介绍
Python Web开发常用框架介绍 Python 是一种简洁、易于学习且功能强大的编程语言,广泛应用于 Web 开发、数据分析、人工智能等领域。Python 的 Web 开发框架能帮助开发者更高效地创建和管理 Web 应用。本文将介绍几种常用的 Python Web 开发框架,帮助你选…...
【新能源科学与技术】MATALB/Simulink小白教程(一)实验文档【新能源电力转换与控制仿真】
DP读书:新能源科学与工程——专业课「新能源发电系统」 2025a 版本 MATLAB下面进入正题 仿真一:Buck 电路一、仿真目的二、仿真内容(一)Buck电路基本构成及工作原理(二)Buck电路仿真模型及元件连接…...
[Unity]ColdKD树 冷处理解决含有删除操作的最近邻问题
在 Unity 开发中,最近邻问题是一个常见的需求场景。例如,在游戏中的寻路系统、物体之间的交互检测、资源分配等场景中,都需要快速准确地找到某个点或物体的最近邻。然而,传统的暴力遍历方法在处理这类问题时,往往会暴露…...
快速生成安卓证书并打包生成安卓apk(保姆教程)
一.生成安卓证书 目前市面上生成可以快速生成安卓证书的网站有很多个人推荐香蕉云编以下是网站链接 香蕉云编-app打包上架工具类平台 1.进入网站如下图 2.点击生成签名证书 3.点击立即创建证书 4.点击创建安卓证书 5.按照指引完成创建 6.点击下载就可使用 二.打包安卓apk …...
mysql mvvc 实现方案
Mysql 事务隔离级别 并发问题 mysql中事务并发时,会产生的问题如下 脏读: 读到了其他事务中,暂未提交的数据 脏读 (Dirty Read) 是数据库事务隔离级别中最低的一种隔离级别 (READ UNCOMMITTED) 下可能出现的一种并发问题。 它指的是一个事务读取了另…...
校园外卖服务系统的设计与实现(代码+数据库+LW)
摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,外卖信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广…...
纷析云:开源财务管理软件的创新与价值
在企业数字化转型中,纷析云作为一款优秀的开源财务管理软件,正为企业财务管理带来新变革,以下是其核心要点。 一、产品概述与技术架构 纷析云采用微服务架构,功能组件高内聚低耦合,可灵活扩展和定制。前端基于现代框…...
Centos安装Dockers+Postgresql13+Postgis3.1
centos8安装docker步骤 1、# 强制卸载 podman 和 buildah 执行命令: yum erase podman buildah 2、# 添加阿里云仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 3、# 安装基础依赖包 yum install…...
【计算机网络 | 第二篇】常见的通信协议(一)
HTTP和HTTPS有什么区别? 端口号:HTTP默认是80端口,HTTPS默认是443。 URL前缀:HTTPHTTP 的 URL 前缀是 http://,HTTPS 的 URL 前缀是 https://。 安全性和资源消耗:HTTP协议运行在TCP上,都是明…...
基于Java与MAVLink协议的多无人机(Cube飞控)集群控制与调度方案问题
基于Java与MAVLink协议的多无人机(Cube飞控)集群控制与调度方案问题 背景需求: 我们目前有一个基于Cube飞控的无人机系统,需实现以下核心功能: 多机通信:通过MAVLink协议同时连接并控制多架无人机&#x…...
单片机——使用printf调试
配置printf()输出函数 1、来自于<stdio.h> 2、运行C语言时,输出到终端 3、单片机没有终端,需要使用串口,将要输出的内容传到电脑(串口调试助手)上 例子如下 #include <stdio.h> #include &qu…...
4.23晚间工作总结
主要工作:将ClassicDetail界面拆分成utils,apis,stores,css,vue多个文件,方便后续重用 具体代码截图:...
Spring 用到了哪些设计模式?
Spring 框架使用了多种设计模式,这些模式帮助其实现松耦合、高内聚和可扩展性。以下是 Spring 中常见的设计模式及其应用场景: 1. 工厂模式(Factory Pattern) 应用场景:Spring 的 BeanFactory 和 ApplicationContext 是…...
JavaEE学习笔记(第二课)
1、好用的AI代码工具cursor 2、Java框架:Spring(高级框架)、Servelt、Struts、EJB 3、Spring有两层含义: ①Spring Framework(原始框架) ②Spring家族 4、Spring Boot(为了使Spring简化) 5、创建Spring Boot 项目 ① ② ③…...
约束constraint
创建表时,可以给表的字段添加约束,可以保证数据的完整性、有效性。比如大家上网注册用户时常见的:用户名不能为空。对不起,用户名已存在。等提示信息。 约束通常包括: 非空约束:not null检查约束…...
【Qwen2.5-VL 踩坑记录】本地 + 海外账号和国内账号的 API 调用区别(阿里云百炼平台)
API 调用 阿里云百炼平台的海内外 API 的区别: 海外版:需要进行 API 基础 URL 设置国内版:无需设置。 本人的服务器在香港,采用海外版的 API 时,需要进行如下API端点配置 / API基础URL设置 / API客户端配置…...
解锁现代生活健康密码,开启养生新方式
在科技飞速发展的当下,我们享受着便捷生活,却也面临诸多健康隐患。想要维持良好状态,不妨从这些细节入手,解锁科学养生之道。 肠道是人体重要的消化器官,也是最大的免疫器官,养护肠道至关重要。日常可多…...
在kali中安装AntSword(蚁剑)
步骤一、下载压缩包 源码:https://github.com/AntSwordProject/antSword,下载压缩包。 加载器:https://github.com/AntSwordProject/AntSword-Loader,根据系统选择压缩包(kali选择AntSword-Loader-v4.0.3-linux-x64&…...
GateWay与Consul知识点
这是一个涵盖客户端访问、网关处理、服务注册发现、业务服务及鉴权授权的系统架构图,各部分解析如下: 客户端层 App 端、Web 端:代表不同类型的客户端,涵盖手机 App、电脑 Web 页面等。用户通过这些客户端发起请求,访…...
安宝特科技 | Vuzix Z100智能眼镜+AugmentOS:重新定义AI可穿戴设备的未来——从操作系统到硬件生态,如何掀起无感智能革命?
一、AugmentOS:AI可穿戴的“操作系统革命” 2025年2月3日,Vuzix与AI人机交互团队Mentra联合推出的AugmentOS,被业内视为智能眼镜领域的“iOS时刻”。这款全球首个专为智能眼镜设计的通用操作系统,通过三大突破重新定义了AI可穿戴…...
【数据结构和算法】1. 数据结构和算法简介、二分搜索
本文根据 数据结构和算法入门 视频记录 文章目录 1. 数据结构和算法简介1.1 什么是数据结构?什么是算法?1.2 数据结构和算法之间的关系1.3 “数据结构和算法”有那么重要吗? 2. 二分搜索(Binary Search)2.1 算法概念2…...
SpringBoot3设置maven package直接打包成二进制可执行文件
注意事项 SpringBoot普通native打包顺序clean compile spring-boot:process-aot native:compile 使用以下配置只会的打包顺序clean package(注意:使用此配置以后打包会有编译后的class文件、jar包、original源文件、二进制可执行文件【Linux是无后缀的包…...
LeetCode每日一题4.20
781.森林中的兔子 问题 问题分析 根据题目描述,我们需要解决的问题是:给定一个数组 answers,其中每个元素表示某只兔子回答的“还有多少只兔子与你颜色相同”,要求返回森林中兔子的最少数目。 思路 理解 answers 数组…...
Leetcode - 周赛446
目录 一、3522. 执行指令后的得分二、3523. 非递减数组的最大长度三、3524. 求出数组的 X 值 I四、3525. 求出数组的 X 值 II 一、3522. 执行指令后的得分 题目链接 本题就是一道模拟题,代码如下: class Solution {public long calculateScore(String…...
时序数据库 TDengine 助力石油石化业务, 平滑接替 Oracle 数据库
小T导读:胜软科技在石油石化行业中选择使用 TDengine 处理时序数据,不仅显著降低了运维数据库的成本,也大幅减少了存储空间的占用,实现了从原有的 40 多套 Oracle 数据库向仅 9 套 TDengine集群的精简替换。在迁移过程中ÿ…...
macOS 系统设置息屏情况下,PHP等后台脚本继续执行
在 macOS 系统下,当屏幕息屏或合上盖子时,后台脚本程序是否会继续运行,主要取决于以下几个因素: 1. 系统睡眠状态的影响 默认情况:合盖/息屏后,Mac 会进入「睡眠模式」(部分硬件休眠ÿ…...
