使用Mybaitis-plus提供的各种的免写SQL的Wrapper的使用方式

news2025/4/25 4:54:57

文章目录

  • 内连接
  • 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语句如下:

SELECT
	m1.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 
FROM
	TOOLS_MENU m1
	INNER 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:

SELECT
	t.USER_ID,
	t.user_name,
	t.sex,
	t.emp_id,
	t.phone_number,
	t.role_code,
	t1.TENANT_USER_RELATION_ID 
FROM
	TOOLS_USER t
	LEFT 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语句如下:

SELECT
	t.USER_ID,
	t.user_name,
	t.sex,
	t.emp_id,
	t.phone_number,
	t.role_code,
	t1.role_name,
	t2.TENANT_USER_RELATION_ID 
FROM
	TOOLS_USER t
	LEFT 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方法,因为它是专为做删除定制的。

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

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

相关文章

springboot-基于Web企业短信息发送系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 当今社会已经步入了科学技术进步和经济社会快速发展的新时期&#xff0c;国际信息和学术交流也不断加强&#xff0c;计算机技术对经济社会发展和人民生活改善的影响也日益突出&#xff0c;人类的生存和思考方式也产生了变化。本系统采用B/S架构&#xff0c;数据库是MySQL…

秀丸编辑器 使用技巧

参考资料 第II部〜知っていると便利な秀丸の機能 検索テキストファイルの16進表示について秀丸エディタヘルプ目次秀丸エディタ&#xff31;&#xff06;&#xff21;集(第9.6版)&#xff08;HTML 形式&#xff09;テンプレート&#xff08;Ver9.43対応版&#xff09; 目录 零…

什么是量子计算?它能做什么?

抛一枚硬币。要么正面朝上&#xff0c;要么反面朝上&#xff0c;对吧&#xff1f;当然&#xff0c;那是在我们看到硬币落地的结果之后。但当硬币还在空中旋转时&#xff0c;它既不是正面也不是反面&#xff0c;而是正面和反面都有一定的可能性。 这个灰色地带就是量子计算的简…

【新能源科学与技术】MATALB/Simulink小白教程(一)实验文档【新能源电力转换与控制仿真】

DP读书&#xff1a;新能源科学与工程——专业课「新能源发电系统」 2025a 版本 MATLAB下面进入正题 仿真一&#xff1a;Buck 电路一、仿真目的二、仿真内容&#xff08;一&#xff09;Buck电路基本构成及工作原理&#xff08;二&#xff09;Buck电路仿真模型及元件连接&#xf…

快速生成安卓证书并打包生成安卓apk(保姆教程)

一.生成安卓证书 目前市面上生成可以快速生成安卓证书的网站有很多个人推荐香蕉云编以下是网站链接 香蕉云编-app打包上架工具类平台 1.进入网站如下图 2.点击生成签名证书 3.点击立即创建证书 4.点击创建安卓证书 5.按照指引完成创建 6.点击下载就可使用 二.打包安卓apk …

mysql mvvc 实现方案

Mysql 事务隔离级别 并发问题 mysql中事务并发时&#xff0c;会产生的问题如下 脏读: 读到了其他事务中&#xff0c;暂未提交的数据 脏读 (Dirty Read) 是数据库事务隔离级别中最低的一种隔离级别 (READ UNCOMMITTED) 下可能出现的一种并发问题。 它指的是一个事务读取了另…

校园外卖服务系统的设计与实现(代码+数据库+LW)

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;外卖信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能满足广…

纷析云:开源财务管理软件的创新与价值

在企业数字化转型中&#xff0c;纷析云作为一款优秀的开源财务管理软件&#xff0c;正为企业财务管理带来新变革&#xff0c;以下是其核心要点。 一、产品概述与技术架构 纷析云采用微服务架构&#xff0c;功能组件高内聚低耦合&#xff0c;可灵活扩展和定制。前端基于现代框…

Centos安装Dockers+Postgresql13+Postgis3.1

centos8安装docker步骤 1、# 强制卸载 podman 和 buildah 执行命令&#xff1a; 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有什么区别&#xff1f; 端口号&#xff1a;HTTP默认是80端口&#xff0c;HTTPS默认是443。 URL前缀&#xff1a;HTTPHTTP 的 URL 前缀是 http://&#xff0c;HTTPS 的 URL 前缀是 https://。 安全性和资源消耗&#xff1a;HTTP协议运行在TCP上&#xff0c;都是明…

单片机——使用printf调试

配置printf()输出函数 1、来自于<stdio.h> 2、运行C语言时&#xff0c;输出到终端 3、单片机没有终端&#xff0c;需要使用串口&#xff0c;将要输出的内容传到电脑&#xff08;串口调试助手&#xff09;上 例子如下 #include <stdio.h> #include &qu…

4.23晚间工作总结

主要工作&#xff1a;将ClassicDetail界面拆分成utils,apis,stores,css,vue多个文件&#xff0c;方便后续重用 具体代码截图&#xff1a;

JavaEE学习笔记(第二课)

1、好用的AI代码工具cursor 2、Java框架&#xff1a;Spring(高级框架)、Servelt、Struts、EJB 3、Spring有两层含义&#xff1a; ①Spring Framework&#xff08;原始框架&#xff09; ②Spring家族 4、Spring Boot(为了使Spring简化) 5、创建Spring Boot 项目 ① ② ③…

约束constraint

创建表时&#xff0c;可以给表的字段添加约束&#xff0c;可以保证数据的完整性、有效性。比如大家上网注册用户时常见的&#xff1a;用户名不能为空。对不起&#xff0c;用户名已存在。等提示信息。 约束通常包括&#xff1a; 非空约束&#xff1a;not null检查约束&#xf…

解锁现代生活健康密码,开启养生新方式

在科技飞速发展的当下&#xff0c;我们享受着便捷生活&#xff0c;却也面临诸多健康隐患。想要维持良好状态&#xff0c;不妨从这些细节入手&#xff0c;解锁科学养生之道。​ 肠道是人体重要的消化器官&#xff0c;也是最大的免疫器官&#xff0c;养护肠道至关重要。日常可多…

在kali中安装AntSword(蚁剑)

步骤一、下载压缩包 源码&#xff1a;https://github.com/AntSwordProject/antSword&#xff0c;下载压缩包。 加载器&#xff1a;https://github.com/AntSwordProject/AntSword-Loader&#xff0c;根据系统选择压缩包&#xff08;kali选择AntSword-Loader-v4.0.3-linux-x64&…

GateWay与Consul知识点

这是一个涵盖客户端访问、网关处理、服务注册发现、业务服务及鉴权授权的系统架构图&#xff0c;各部分解析如下&#xff1a; 客户端层 App 端、Web 端&#xff1a;代表不同类型的客户端&#xff0c;涵盖手机 App、电脑 Web 页面等。用户通过这些客户端发起请求&#xff0c;访…

安宝特科技 | Vuzix Z100智能眼镜+AugmentOS:重新定义AI可穿戴设备的未来——从操作系统到硬件生态,如何掀起无感智能革命?

一、AugmentOS&#xff1a;AI可穿戴的“操作系统革命” 2025年2月3日&#xff0c;Vuzix与AI人机交互团队Mentra联合推出的AugmentOS&#xff0c;被业内视为智能眼镜领域的“iOS时刻”。这款全球首个专为智能眼镜设计的通用操作系统&#xff0c;通过三大突破重新定义了AI可穿戴…

LeetCode每日一题4.20

781.森林中的兔子 问题 问题分析 根据题目描述&#xff0c;我们需要解决的问题是&#xff1a;给定一个数组 answers&#xff0c;其中每个元素表示某只兔子回答的“还有多少只兔子与你颜色相同”&#xff0c;要求返回森林中兔子的最少数目。 思路 理解 answers 数组&#xf…

Leetcode - 周赛446

目录 一、3522. 执行指令后的得分二、3523. 非递减数组的最大长度三、3524. 求出数组的 X 值 I四、3525. 求出数组的 X 值 II 一、3522. 执行指令后的得分 题目链接 本题就是一道模拟题&#xff0c;代码如下&#xff1a; class Solution {public long calculateScore(String…