mybatis-plus构造器查询

文章目录

  • Hutool工具包Vo与entity转换
  • 多表分页查询
  • 构造器:查询
  • 构造器:拼接
  • 构造器:删除操作
  • 构造器:修改操作
  • 查询关键字


Hutool工具包Vo与entity转换

BeanUtils:copyProperties(vo, entity),vo转实体类。

LambdaQueryWrapper 构造不同类型的查询条件,
orderByDesc 方法用于降序排序。

需要注意:

​ 使用 LambdaQueryWrapper 时,实体类 和 **数据库表 **之间映射关系。

实体类必须使用 @TableName 注解,指定表名。

多表分页查询

IPage<DeviceItemResp> devicePages = tDevicesMapper.selectJoinPage(userPage, DeviceItemResp.class,new MPJLambdaWrapper<TDevices>().select(TDevices::getSn)    // 查询出指定字段.select(TDevices::getName).selectAs(TDevices::getBlueContent, DeviceItemResp::getBluetooth).innerJoin(TuserDevice.class, TuserDevice::getDeviceSn, TDevices::getSn).eq(TuserDevice::getUserId, userId).orderByDesc(TDevices::getCreateDate));// new MPJLambdaWrapper<TDevices>(): 
// MPJLambdaWrapper 是一个条件构造器,用于构建查询条件。
// new MPJLambdaWrapper<TDevices>() 创建了一个 TDevices 实体类的条件构造器对象。
// .selectAs() 方法用于指定查询的字段,并将其作为另一个字段的别名。这里使用 TDevices::getBlueContent 方法引用来查询 TDevices 实体类的 blueContent 字段,并将其作为 DeviceItemResp 类中的 bluetooth 字段的别名。/***  .selectAs() 方法用于指定查询的字段,并将其作为另一个字段的别名。*  这里使用 TDevices::getBlueContent 方法引用来查询 TDevices 实体类的 blueContent 字段,并将其作为 DeviceItemResp 类中的 bluetooth 字段的别名。** .innerJoin() 方法用于指定联合查询的表和关联条件。这里使用 TuserDevice.class 表示联合查询的表是 TuserDevice,并通过 TuserDevice::getDeviceSn 和 TDevices::getSn 方法引用来指定关联条件。** .eq() 方法指定查询的相等条件,这里使用 TuserDevice::getUserId 方法引用来查询 TuserDevice 表中的 userId 字段,并与变量 userId 进行相等比较。** .orderByDesc() 按照 createDate 字段进行降序排序。** 以上就是这段代码的详细解释。它主要实现了一个联合查询,并通过条件构造器指定了查询字段、关联表和条件,并对结果进行了分页和排序。*/

构造器:查询

// 简化构造器LambdaQueryWrapper<ThingInfoPO> lambdaQueryWrapper =Wrappers.lambdaQuery(.class).eq(::getCode, code);// 1、根据指定条件进行查询一条记录。
LambdaQueryWrapper<SaveDevice> queryWrapper =  new LambdaQueryWrapper<>();queryWrapper.eq(SaveDevice::getDeviceUid, registerDTO.getDeviceUid());SaveDevice saveDevice = saveDeviceMapper.selectOne(queryWrapper);// 1.1 查询指定名称的用户列表
List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getName, "John").orderByDesc(User::getAge));// 1.2 批量查询LambdaQueryWrapper<PlantLabelConfigPo> queryWrapper =Wrappers.lambdaQuery(PlantLabelConfigPo.class).in(PlantLabelConfigPo::getId, listLabelId);// 1.3 查询出指定字段,修改时间不在某个区间的值。
LocalDateTime now = LocalDateTime.now();LocalDateTime localDateTime = now.minusHours(1);Date oneHourBefore = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());this.listObjs(new LambdaQueryWrapper<DeviceDetailLowFrequency>().notBetween(DeviceDetailLowFrequency::getUpdateTime, oneHourBefore, new Date()).select(DeviceDetailLowFrequency::getSn), Object::toString);

构造器:拼接

// 1、构造器拼接SQL语句
LambdaQueryWrapper<ThingInfoPO> wrapper =buildThingInfoQuery(tenantId).eq(ThingInfoPO::getCode, thing.getCode());// 2、拼接构造条件
private LambdaQueryWrapper<ThingInfoPO> buildThingInfoQuery(@Nullable Long tenantId) {LambdaQueryWrapper<ThingInfoPO> wrapper = new QueryWrapper<ThingInfoPO>().lambda();if (tenantId != null) {wrapper.eq(ThingInfoPO::getTenantId, tenantId);}return wrapper;}

构造器:删除操作

// 1、删除所有名字为 Jack 的用户记录
int rows = userMapper.delete(new LambdaQueryWrapper<User>().eq(User::getName, "Jack"));// 2、批量删除
LambdaQueryWrapper<PlantLabelInfoPo> wrapper = new QueryWrapper<PlantLabelInfoPo>().lambda();wrapper.in(PlantLabelInfoPo::getPlantLabelId, idList);plantLabelInfoDao.delete(wrapper);

构造器:修改操作

// 更新所有名字为 John 的用户记录,设置年龄为 30
int rows = userMapper.update(new User(), new LambdaQueryWrapper<User>().eq(User::getName, "John").set(User::getAge, 30));// 根据指定条件进行修改。
UpdateWrapper<SaveDevice> wrapper = new UpdateWrapper<>();wrapper.eq("device_uid", registerDTO.getDeviceUid());wrapper.set("psk", psk);
saveDeviceMapper.update(null, wrapper);// 更新多个字段.
LambdaUpdateWrapper<DeviceDetail> updateWrapper = new LambdaUpdateWrapper<>();updateWrapper.eq(DeviceDetail::getSn, req.getSn());deviceDetail.setUpdateBy(CurrentUser.getUser());deviceDetail.setUpdateTime(new Date());// 更新实体类中所有字段,会覆盖数据库字段。谨慎使用。
deviceDetailMapper.update(new DeviceDetail(), updateWrapper);

查询关键字

查询方式说明
setSqlSelect设置 SELECT 查询字段
whereWHERE 语句,拼接 +?WHERE 条件
andAND 语句,拼接 +?AND 字段=值
andNewAND 语句,拼接 +?AND (字段=值)
orOR 语句,拼接 +?OR 字段=值
orNewOR 语句,拼接 +?OR (字段=值)
eq等于 =
allEq基于 map 内容等于 =
ne不等于 <>
gt大于 >
ge大于等于 >=
lt小于 <
le小于等于 <=
like模糊查询 LIKE
notLike模糊查询 NOT LIKE
inIN 查询
notInNOT IN 查询
isNullNULL 值查询
isNotNullIS NOT NULL
groupBy分组 GROUP BY
havingHAVING 关键词
orderBy排序 ORDER BY
orderAscASC 排序 ORDER BY
orderDescDESC 排序 ORDER BY
existsEXISTS 条件语句
notExistsNOT EXISTS 条件语句
betweenBETWEEN 条件语句
notBetweenNOT BETWEEN 条件语句
addFilter自由拼接 SQL
last拼接在最后,例如:last(“LIMIT 1”)
/*** 屏幕尺寸*/
@Max(message = "尺寸最大值不超过10", value = 10)
@Min(message = "尺寸最小值不低于4", value = 4)
private Integer screenSize;/*** 运行的系统平台*/@EnumVale(value = {"system_linux", "system_android", "system_none"}, message = "运行的系统平台不允许填入其他值")@NotBlank(message = "运行的系统平台数据不为空")private String system;// 使用Sa-token实现单点登录
QueryDSL仅仅是一个通用的查询框架,专注于通过 JavaAPI 构建类型安全的 Sql 查询,也可以说 QueryDSL 是基于各种 ORM 框架以及 Sql 之上的一个通用的查询框架,QueryDSL 的查询,类是于 SQL 查询,很全面只不过一个是用 SQL 一个是用代码来代替 SQL

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

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

相关文章

在装有 PostgreSQL 14 的 Red Hat8上安装 `pg_cron`

要在装有 PostgreSQL 14 的 Red Hat、CentOS、Fedora 或 Amazon Linux 上安装 pg_cron&#xff0c;请遵循以下步骤。这些步骤假定您已经安装了 PostgreSQL Global Development Group (PGDG) 的 PostgreSQL 版本。 安装 pg_cron 扩展 使用 yum 安装 pg_cron 扩展&#xff1a;s…

(四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)

一、无人机模型简介&#xff1a; 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 参考文献&#xff1a; [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、Tiki-taka算法&#xff08;TTA&#xf…

基于SSH的java记账管理系统

基于SSH的java记账管理系统 一、系统介绍二、功能展示四、其他系统实现五、获取源码 一、系统介绍 项目类型&#xff1a;Java EE项目 项目名称&#xff1a;基于SSH的记账管理系统 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 前端技术&#xff1a;HTML、CS…

初识优先级队列与堆

1.优先级队列 由前文队列queue可知&#xff0c;队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下&#xff0c;操作的数据可能带有优先级&#xff0c;一般出队列时&#xff0c;可能需要优先级高的元素先出队列&#xff0c;在此情况下&#xff0c;使用队列queue显然不…

git常用命令指南

目录 一、基本命令 1、创建分支 2、切换分支 3、合并分支 4、初始化空git仓库 二、文件操作 1、创建文件 2、添加多个文件 3、查看项目的当前状态 4、修改文件 5、删除文件 6、提交项目 三、实际操作 1、创建目录 2、进入新目录 3、初始化空git仓库 4、创建文…

C++STL的string模拟实现

文章目录 前言string的成员变量成员函数构造函数拷贝构造赋值重载 模拟实现string各种接口print迭代器普通迭代器const迭代器 string比较大小push_backinsert 和 eraseinserterase reserve和resizereserveresize swapfindcout和cincoutcin 前言 今天要讲string的底层实现&…

总线(什么是南北桥?您都用过哪些总线?)

什么是总线&#xff1f; 计算机系统中的总线&#xff08;Bus&#xff09;是指计算机设备和设备之间传输信息的公共数据通道&#xff0c;是连接计算机硬件系统内多种设备的通信线路&#xff0c;它的一个重要特征是由总线上的所有设备共享&#xff0c;因此可以将计算机系统内的多…

python基于轻量级GhostNet模型开发构建23种常见中草药图像识别系统

轻量级识别模型在我们前面的博文中已经有过很多实践了&#xff0c;感兴趣的话可以自行移步阅读&#xff1a; 《移动端轻量级模型开发谁更胜一筹&#xff0c;efficientnet、mobilenetv2、mobilenetv3、ghostnet、mnasnet、shufflenetv2驾驶危险行为识别模型对比开发测试》 《基…

Vue 核心 数据监听 computed | watch

Vue 核心 数据监听 computed | watch 一、今日学习目标 1.指令补充 指令修饰符v-bind对样式增强的操作v-model应用于其他表单元素 2.computed计算属性 基础语法计算属性vs方法计算属性的完整写法成绩案例 3.watch侦听器 基础写法完整写法 4.综合案例 &#xff08;演示&…

缺陷责任期与质量保修期如何快速区分?

缺陷责任期 《建设工程质量保证金管理办法》第二条对缺陷给出了定义&#xff0c;是指建设工程质量不符合工程建设强制性标准、设计文件&#xff0c;以及承包合同的约定。缺陷责任期是指承包人对工程质量瑕疵担保的期限&#xff0c;由发承包双方在合同中进行约定&#xff0c;期…

制造业数字化转型该怎么做?这篇1.6万字的文章终于讲透了!

制造业数字化转型该怎么做&#xff1f;下面通过 1.6W 字干货内容&#xff0c;全面讲透制造业数字化转型。 &#xff08;为防后续找不到&#xff0c;建议大家先点赞收藏~&#xff09; 引言&#xff1a; 1、发达国家制造业回流力度加大&#xff0c;中国制造业战略地位提升。 …

selenium 解决 id定位、class定位中,属性值带空格的解决办法

一、前置说明 selenium遇到下面这种元素&#xff1a; <th id"demo id" class"value1 value2 value3 ">1、虽然id一般不会有空格&#xff0c;但是前端错误的这种写法(如下图)&#xff0c;会造成使用id定位不到元素&#xff0c;如&#xff1a; find…

面试遇到的一些问题(二)

1、v-if v-show 区别,他们的生命周期区别 v-show: (类似于display:none/black 的切换)不管初始值是true 或false 都会进行渲染,状态改变也不会销毁和重新生成。不会影响生命周期 v-if : 是根据条件,dom进行删除插入操作。 依附于普通元素时:会触发父组件的beforeUpdate和u…

IOday6作业

1>使用有名管道&#xff0c;完成两个进程的相互通信 //create.c #include<myhead.h>int main(int argc, const char *argv[]) {if((mkfifo("myfifo1",0664)) -1){perror("mkfifo");return -1;}if((mkfifo("myfifo2",0664)) -1){perror…

MYSQL练题笔记-高级查询和连接-这系列最后一题以及下个系列(子查询)的第一题

今天做了下面两题&#xff0c;到第三题的时候想了下但是没有太多的思路&#xff0c;然后看题解的时候实在是觉得自己不会&#xff0c;打算明天看吧。 1.按分类统计薪水相关的表和题目如下 我是想着简化问题&#xff0c;先找出薪水低于30000的员工&#xff0c;然后找这些员工的上…

JAVA 锁

乐观锁 乐观锁是一种乐观思想&#xff0c;即认为读多写少&#xff0c;遇到并发写的可能性低&#xff0c;每次去拿数据的时候都认为别人不会修改&#xff0c;所以不会上锁&#xff0c;但是在更新的时候会判断一下在此期间别人有没有去更新这个数据&#xff0c;采取在写时先读出…

Sam Altman当选“TIME时代周刊”2023年度最佳CEO!还有梅西、Taylor Swift当选...

TIME时代周刊昨日在官网公布了2023年最佳CEO—— Sam Altman当选! 此外&#xff0c;Taylor Swift当选年度最佳人物&#xff0c;梅西当选年度最佳运动员。 Sam Altman的当选可谓是实至名归&#xff01;没有谁能比火爆全球的ChatGPT背后&#xff0c;OpenAI的CEO更“成功”了。 …

ssh安装及问题解决

ssh安装及遇到的问题 ssh分为客户端 openssh-client 和服务器 openssh-server&#xff0c;可以利用以下命令确认是否安装&#xff1a; dpkg -l | grep ssh我用ubantu安装的&#xff0c;所以默认安装了客户端 安装客户端和服务器端的命令分别为&#xff1a; sudo apt-get ins…

金融量化交易:使用Python实现遗传算法

大家好&#xff0c;遗传算法是一种受自然选择过程启发的进化算法&#xff0c;用于寻找优化和搜索问题的近似解决方案。本文将使用Python来实现一个用于优化简单交易策略的遗传算法。 1.遗传算法简介 遗传算法是一类基于自然选择和遗传学原理的优化算法&#xff0c;其特别适用…

MySQL 教程 2.1

MySQL 插入数据 MySQL 表中使用 INSERT INTO 语句来插入数据。 你可以通过 mysql> 命令提示窗口中向数据表中插入数据&#xff0c;或者通过PHP脚本来插入数据。 语法 以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法&#xff1a; INSERT INTO table_name (colu…