【MybatisPlus】LambdaQueryWrapper和QueryWapper的区别

个人主页:金鳞踏雨

个人简介:大家好,我是金鳞,一个初出茅庐的Java小白

目前状况:22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作

我的博客:这里是CSDN,是我学习技术,总结知识的地方。希望和各位大佬交流,共同进步 ~

MyBatisPlus的条件查询构造器 

MyBatis-Plus 是一个基于 MyBatis 的增强工具库,旨在简化 MyBatis 的使用并提供更多的便利功能。其中,QueryWrapper 和 LambdaQueryWrapper 都是 MyBatis-Plus 提供的查询条件构造器,用于构建 SQL 查询语句的条件部分。

QueryWrapper 

QueryWrapper 是 MyBatis-Plus 最基础的查询条件构造器之一。它通过链式调用的方式构建查询条件,并使用普通的字符串作为字段名、操作符和值。它的使用方式类似于传统的 SQL 查询。

LambdaQueryWrapper  

LambdaQueryWrapper 是在 QueryWrapper 的基础上增加了使用 Lambda 表达式的功能,使得构建查询条件更加类型安全、易读,并且能够在编译时进行语法检查。它通过方法引用的方式来指定实体类的属性,并提供了丰富的方法来构建查询条件。

类图

  • Wrapper:条件构造抽象类,最顶端父类
  • AbstractWrapper:用于查询条件封装,生成 sql 的 where 条件
  • QueryWrapper:Entity 对象封装操作类,不是用lambda语法
  • UpdateWrapper:Update 条件封装,用于Entity对象更新操作
  • AbstractLambdaWrapper :​Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。
  • ​LambdaQueryWrapper :用于Lambda语法使用的查询Wrapper
  • ​LambdaUpdateWrapper :​Lambda 更新封装Wrapper

简单使用

public class User {
    private Long id;
    private String name;
    private Integer age;
    private LocalDateTime createTime;
    // 其他字段...
    // 省略 getter 和 setter 方法
}
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 25)
            .like("name", "John")
            .orderByDesc("create_time")
            .last("limit 10");
List<User> userList = userMapper.selectList(queryWrapper);
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getAge, 25)
                .like(User::getName, "John")
                .orderByDesc(User::getCreateTime)
                .last("limit 10");
List<User> userList = userMapper.selectList(lambdaQueryWrapper);

我们首先构建了 QueryWrapper 或 LambdaQueryWrapper 对象,并设置查询条件。然后,创建了一个 Page 对象来指定要查询的页码每页数量。最后,通过调用映射器接口的 selectPage() 方法来执行分页查询,得到分页后的结果。

注意,selectPage() 方法返回的是一个 Page对象,其中包含了分页后的数据和总记录数等信息。

如果你希望在构建查询条件时具有更好的类型安全性和易读性,推荐使用 LambdaQueryWrapper 。如果简单查询条件已经满足需求,或者需要更灵活的拼接查询条件,可以使用 QueryWrapper 。

注意:lambdaQueryWrapper.eq(User::getAge, 25)

里面的 User::getAge 表示查询 age 值为25的用户。这是一种 Java 8+ 中的语法,用于方法引用,直接引用了实体类的属性和方法

优缺点

LambdaQueryWrapper

  • 优点:类型安全、易读性高,可以直接使用实体类的属性和方法。
  • 缺点:在某些复杂查询操作下可能不支持。

QueryWrapper

  • 优点:更灵活,支持复杂查询操作和 SQL 片段拼接。
  • 缺点:类型不安全、可读性较差。

一般情况下,如果你的查询条件相对简单且你更注重代码的清晰性和类型安全性,可以优先考虑使用 LambdaQueryWrapper。但如果你需要进行复杂的查询操作,特别是涉及到复杂的 SQL 片段拼接等情况,可能需要使用 QueryWrapper

文章到这里就结束了,如果有什么疑问的地方,可以在评论区指出~

希望能和大佬们一起努力,诸君顶峰相见

再次感谢各位小伙伴儿们的支持!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

移动端预览指定链接的pdf文件流

场景 直接展示外部系统返回的获取文件流时出现了跨域问题&#xff1a; 解决办法 1. 外部系统返回的请求头中调整&#xff08;但是其他系统不会给你改的&#xff09; 2. 我们系统后台获取文件流并转为新的文件流提供给前端 /** 获取传入url文件流 */ GetMapping("/get…

如何在 3Ds Max 中准确地将参考图像调整为正确的尺寸?

您是否想知道如何在 3Ds Max 中轻松直观地调整参考图像的大小&#xff0c;而无需借助第三方解决方案、插件或脚本&#xff1f; 我问自己这个问题&#xff0c;并高兴地发现了FFD Box 2x2x2&#xff0c;我无法停止钦佩这个修改器的多功能性。 在本文中&#xff0c;我想与您分享一…

image has dependent child images

问题&#xff1a;很多none的镜像无法被删除 解决过程&#xff1a; 1、通过 docker image prune -f 提示可删除为 0 2、直接进行删除报错&#xff1a; docker rmi 8f5116cbc201Error response from daemon: conflict: unable to delete 8f5116cbc201 (cannot be forced) - im…

时序预测 | MATLAB实现WOA-CNN-BiLSTM鲸鱼算法优化卷积双向长短期记忆神经网络时间序列预测

时序预测 | MATLAB实现WOA-CNN-BiLSTM鲸鱼算法优化卷积双向长短期记忆神经网络时间序列预测 目录 时序预测 | MATLAB实现WOA-CNN-BiLSTM鲸鱼算法优化卷积双向长短期记忆神经网络时间序列预测预测效果基本介绍程序设计学习总结参考资料 预测效果 基本介绍 时序预测 | MATLAB实现…

如何正确下载tomcat???

亲爱的小伙伴&#xff0c;千万别再去找下网站下载啦&#xff0c;这样詪容易携带病毒。 我们去官方网址下载。 Apache Tomcat - Welcome! 最后下载解压即可。。。

学习C语言的好处:

基础编程语言&#xff1a;C语言是其他编程语言的基础&#xff0c;学习C语言可为后续学习打下坚实基础&#xff0c;广泛应用于嵌入式系统、操作系统、网络协议等。 简单易学&#xff1a;C语言语法简单易懂&#xff0c;适合初学者。只需文本编辑器和编译器&#xff0c;即可开始编…

集简云推出的全国第一款 AI+连接器解决方案产品语聚AI

语聚AI是集简云推出的全国第一款 AI连接器解决方案产品&#xff0c;官网&#xff1a;https://yuju.jijyun.cn 语聚AI包括了多个不同的AI功能&#xff0c;协助企业和个人更好的使用AI语言模型所带来的能力&#xff0c;包括&#xff1a; 应用助手 希望通过AI智能助手帮助您查询C…

掌握网络设备,畅游网络世界!

网络的搭建离不开网络设备&#xff0c;物理连接&#xff0c;以及设备之间的多种协议。其中在实现网络互通时&#xff0c;最常见的网络设备是路由器和交换机。 如今在各种级别的网络随处可见各种低、中、高端的路由器、交换机&#xff0c;种类繁多&#xff0c;这些不同种类的设备…

UGUI基础游戏对象Canvas

一.画布Canvas对象概述 画布是一种带有画布组件的游戏对象&#xff0c;所有 UI 元素都必须是此类画布的子项。 创建新的 UI 元素&#xff08;如使用菜单 GameObject > UI > Image 创建图像&#xff09;时&#xff0c;如果场景中还没有画布&#xff0c;则会自动创建画布。…

uniapp开发小程序-有分类和列表时,进入页面默认选中第一个分类

一、效果&#xff1a; 如下图所示&#xff0c;进入该页面后&#xff0c;默认选中第一个分类&#xff0c;以及第一个分类下的列表数据。 二、代码实现&#xff1a; 关键代码&#xff1a; 进入页面时&#xff0c;默认调用分类的接口&#xff0c;在分类接口里做判断&#xff…

Redis 缓存过期及删除

一、Redis缓存过期策略 物理内存达到上限后&#xff0c;像磁盘空间申请虚拟内存(硬盘与内存的swap),甚至崩溃。 内存与硬盘交换 (swap) 虚拟内存&#xff0c;频繁I0 性能急剧下降&#xff0c;会造成redis内存急剧下降&#xff1b; 一般设置物理内存的3/4&#xff0c;在redis…

【双指针_有效三角形的个数_C++】

题目解析 有效三角形的个数 判断三角形&#xff1a;任意两边之和大于第三边 需要重复计算&#xff1a; 知识点 1、需要判断三次&#xff1a; 2、只需要判断一次 已经知道这三个数的大小&#xff08;先进行排序&#xff09; 只需要判断 较小的两个数之和 是否 大于最大的…

考研408 | 【计算机网络】 传输层

导图 传输层的功能 传输层的两个协议 传输层的寻址与端口 UDP协议 UDP的主要特点 UDP首部格式&#xff1a; UDP校验&#xff1a; TCP协议 TCP协议的特点 TCP报文段首部格式 TCP连接管理 TCP的连接建立 SYN洪泛攻击 TCP的连接释放 TCP可靠传输 序号&#xff1a; 确认&#xff1…

支持M1 Syncovery for mac 文件备份同步工具

Syncovery for Mac 是一款功能强大、易于使用的文件备份和同步软件&#xff0c;适用于需要备份和同步数据的个人用户和企业用户。Syncovery 提供了一个直观的用户界面&#xff0c;使用户可以轻松设置备份和同步任务。用户可以选择备份的文件类型、备份目录、备份频率等&#xf…

ArcGIS Pro暨基础入门、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合、案例应用

GIS是利用电子计算机及其外部设备&#xff0c;采集、存储、分析和描述整个或部分地球表面与空间信息系统。简单地讲&#xff0c;它是在一定的地域内&#xff0c;将地理空间信息和 一些与该地域地理信息相关的属性信息结合起来&#xff0c;达到对地理和属性信息的综合管理。GIS的…

大数据大屏的分析

今天又进行了大屏的训练&#xff0c;就是很多的报表头是最难的&#xff0c;因为确定了头&#xff0c;就确定了大屏的风格了。 今天的还是有点丑但是也是学习了。报班报班~~~~

抖音小程序开发,收银台支付回调通知

大家好&#xff0c;我是小悟 关于抖音小程序收银台支付&#xff0c;可阅读【抖音小程序开发&#xff0c;唤起收银台&#xff0c;包括抖音支付、支付宝支付、微信支付】。 做支付功能最重要的一步就是异步回调通知&#xff0c;所谓回调通知就是唤起收银台支付&#xff0c;支付…

C++:模拟实现list及迭代器类模板优化方法

文章目录 迭代器模拟实现 本篇模拟实现简单的list和一些其他注意的点 迭代器 如下所示是利用拷贝构造将一个链表中的数据挪动到另外一个链表中&#xff0c;构造两个相同的链表 list(const list<T>& lt) {emptyinit();for (auto e : lt){push_back(e);} }void test_…

CSS练习

CSS练习 工具代码运行结果 工具 HBuilder X 代码 <!DOCTYPE html> <!-- 做一个表格&#xff0c;6行4列实现隔行换色&#xff08;背景色&#xff09;并且第3列文字红色第一个单元格文字大小30px。最后一个单元格文字加粗--> <html><head><meta ch…

android app控制ros机器人五(百度地图)

半吊子改安卓&#xff0c;新增了标签页&#xff0c;此标签页需要显示百度地图 按照官方教程注册信息&#xff0c;得到访问应用AK&#xff0c;步骤也可以参照下面csdn Android地图SDK | 百度地图API SDK 【Android】实现百度地图显示_宾有为的博客-CSDN博客 本人使用的是aar开…