全网详解MyBatis-Plus LambdaQueryWrapper的使用说明以及LambdaQueryWrapper和QueryWapper的区别
文章目录
- 1. 文章引言
- 2. 代码演示
- 3. 分析LambdaQueryWrapper
- 3.1 引入LambdaQueryWrapper的原因
- 3.2 LambdaQueryWrapper和QueryWapper的区别
- 4. 重要总结
1. 文章引言
今天在公司写代码时,发现同事使用LambdaQueryWrapper来查询数据,而我一直习惯使用QueryWrapper。
我对此便来了兴趣,决定尝试了解LambdaQueryWrapper。
2. 代码演示
为了分析LambdaQueryWrapper,给出如下两段代码:
- 通过
LambdaQueryWrapper查询
@Test
public void testLambdaQueryWrapper(){//初始化变量Long applicationId = 62L;String type = "pageFrameApp";// LambdaQueryWrapper查询LambdaQueryWrapper<AppConfig> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.eq(AppConfig::getAppId, applicationId);if (isNotNull(type)) {lambdaQueryWrapper.eq(AppConfig::getConfigType, type);}long count = appConfigService.count(lambdaQueryWrapper);//输出统计数量System.out.println("输出统计结果:"+count);
}
输出统计结果如下图:

输出mybatis-plus打印的SQL语句,如下所示:
JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@62c02089] will not be managed by Spring
==> Preparing: SELECT COUNT( * ) FROM app_config WHERE (app_id = ? AND type = ?)
==> Parameters: 62(Long), pageFrameApp(String)
<== Columns: COUNT( * )
<== Row: 1
<== Total: 1
- 通过
QueryWrapper查询
@Test
public void testQueryWrapper(){//初始化变量Long applicationId = 62L;String type = "pageFrameApp";// LambdaQueryWrapper查询QueryWrapper<AppConfig> queryWrapper = new QueryWrapper<>();queryWrapper.eq("app_id", applicationId);if (isNotNull(type)) {queryWrapper.eq("type", type);}long count = appConfigService.count(queryWrapper);//输出统计数量System.out.println("输出统计结果:"+count);
}
输出结果如下图所示:

输出mybatis-plus打印的SQL语句,如下所示:
JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@31d09031] will not be managed by Spring
==> Preparing: SELECT COUNT( * ) FROM app_config WHERE (app_id = ? AND type = ?)
==> Parameters: 62(Long), pageFrameApp(String)
<== Columns: COUNT( * )
<== Row: 1
<== Total: 1
3. 分析LambdaQueryWrapper
由上面两段代码的演示来看,你会神奇地发现:
-
输出结果是相同的
-
mybatis-plus打印的SQL语句也是相同
为什么会相同呢?我们不妨去看看它们的源码。
QueryWrapper继承AbstractWrapper这个类,如下图所示:

LambdaQueryWrapper继承AbstractLambdaWrapper,而AbstractLambdaWrapper继承是AbstractWrapper,如下图所示。

你会发现,不论是LambdaQueryWrapper,还是QueryWrapper,本质上继承的都是AbstractWrapper这个抽象类。
因而,它们的执行结果相同,只是查询方式不同而已。
3.1 引入LambdaQueryWrapper的原因
但是,既然有了QueryWrapper,为什么还要有LambdaQueryWrapper?我认为有以下两点:
- 适配
jdk1.8
我们都知道,现在主流jdk的版本是jdk1.8,而jdk1.8引入了Lambda表达式。
MyBatis-Plus为了适配jdk1.8,让路走得更宽,才引入了LambdaQueryWrapper。
- 让代码变的更简单
我们再次去看上述QueryWrapper的代码,eq方法要手动写如数据表的字段,我们偶尔会写错。
同时,去看上述LambdaQueryWrapper的代码,eq方法是通过对象属性去映射数据表的字段。
基于以上两点,我认为有必要引入LambdaQueryWrapper类。
3.2 LambdaQueryWrapper和QueryWapper的区别
QueryWrapper要手动写入数据表的字段,千万不要写错数据表的字段,比如上述代码中的eq方法。
LambdaQueryWrapper虽然不用引入数据表的字段,而是通过对象的属性去映射,但这容易出错。
【注意】这里对象的属性是驼峰格式的,不然会报出:unknown column 'xxx' in 'where clause'
比如数据表的字段是app_id,而对象的属性是appid,而我们又没有加上@TableField("app_id")注解 (注解的value值是数据表的字段),如下代码所示:
/** 应用id */
private Long appid;
此时启动测试类,便报出Unknown column 'appid' in 'where clause'问题,如下图所示:

若我们加上@TableField("app_id")注解,如下代码所示:
/** 应用id */
@TableField("app_id")
private Long appid;
此时启动测试类,便不会报错,如下图所示:

当然,我们把appid修改为appId,即便不添加@TableField("app_id")注解,通过LambdaQueryWrapper查询也不会出错。
4. 重要总结
我们在使用QueryWrapper时,要手动写入数据表的字段,注意字段不要写错,不然也会报出unknown column 'xxx' in 'where clause'这个错误
此外,我们在使用LambdaQueryWrapper时,要注意对象的属性和数据表字段的映射,不然极容易报出unknown column 'xxx' in 'where clause'这个错误。
相关文章:
全网详解MyBatis-Plus LambdaQueryWrapper的使用说明以及LambdaQueryWrapper和QueryWapper的区别
文章目录1. 文章引言2. 代码演示3. 分析LambdaQueryWrapper3.1 引入LambdaQueryWrapper的原因3.2 LambdaQueryWrapper和QueryWapper的区别4. 重要总结1. 文章引言 今天在公司写代码时,发现同事使用LambdaQueryWrapper来查询数据,而我一直习惯使用QueryW…...
暴力破解(new)
数据来源 本文仅用于信息安全的学习,请遵守相关法律法规,严禁用于非法途径。若观众因此作出任何危害网络安全的行为,后果自负,与本人无关。 01 暴力破解介绍及应用场景 》暴力破解介绍 》暴力破解字典 GitHub - k8gege/Passwor…...
Android12之apex调试
1.问题在调试libtinyalsa.so中添加log后,但是发现push so后,却没有log打印,why?2.分析以下为libtinyalsa.so的位置/system/lib64/libtinyalsa.so /system/lib/libtinyalsa.so /apex/com.android.vndk.v31/lib64/libtinyalsa.so /a…...
Python - 数字(Number)数据类型常用操作
目录数字运算类型转换数学函数数学库math、cmathmath 模块常量math 模块方法随机函数库 randomrandom 模块方法保留小数到指定位数三角函数数字运算 :用于给变量赋值type(x):查看数据所属类型isinstance(x, A_tuple):判断数据是否为预期类型…...
QT(51)-动态链接库-windows
1.qt- 调用win32 DLL 2.qt- 调用MFC DLL 0概述: 01.扩展DLL: 必须有一个DllMain()函数,且调用AfxInitExtensionModule()函数。 CRuntimeClass类-初始化函数CDynLinkLibrary。02.windows定位DLL文件: 1)…...
[Vivado那些事儿]将自定义 IP (HDL)添加到 Vivado 模块设计(Block Design)
绪论使用Vivado Block Design设计解决了项目继承性问题,但是还有个问题,不知道大家有没有遇到,就是新设计的自定义 RTL 文件无法快速的添加到Block Design中,一种方式是通过自定义IP,但是一旦设计的文件有问题就需要重…...
开学必备数码清单,大学生开学必备数码好物分享
还有很多小伙伴不知道开学应该准备什么,在学校当中需要用到的数码产品,在宿舍娱乐使用的音箱、学习当中使用到的笔记本,这些都是我们可以准备的,还有一个小众的好物,能够让我们在学校当中提升生活的幸福感,…...
【面试题】常见前端基础面试题(HTML,CSS,JS)
大厂面试题分享 面试题库后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库html语义化的理解代码结构: 使页面在没有css的情况下,也能够呈现出好的内容结构有利于SEO: 爬虫根据标签来分配关键字的权重,因此可以和搜索引擎…...
Vue (4)
文章目录1. 绑定样式1.1 绑定 class 样式1.2 绑定 style 样式2. 条件渲染2.1 v-show2.2 v-if3. 列表渲染3.1 v-for3.2 key 的作用与原理3.3 列表过滤3.4 列表排序1. 绑定样式 说 绑定样式 前,先准备好 以下几个 样式 : <style>.basic {width: 400px;height: 1…...
静态库和动态库的制作
一、什么叫做库: 库:二进制的程序,能被操作系统载入内存中执行 二、Linux下的库有两种:静态库和共享库(动态库),二者的不同点在于代码载入的时刻不同。 A、静态库在程序编译的时候并会被连接到目标代码中,程…...
Oracle实现高可用性的工具(负载均衡/故障切换)
Oracle实现高可用性的工具(负载均衡/故障切换)1 Oracle RAC故障转移负载均衡2 Data Guard负载均衡-读写分离Data Guard Broker3 GDSGSM:连接管理工具主要功能Data Guard Broker功能是监控Data Guard状态,当主库异常时自动切换角色…...
图解经典电路之OCL差分功放-三极管分立器件电路分析
下面从简到繁,从框架到细节的顺序讲解电路。即先讲框架,然后逐渐添加电路细节,所以大家跟上思路。 1、第一步,尽可能的抽象这个电路,等效如下: 图二 OCL等效电路 整个OCL电路,可以等效为一个大功率的运放,加上几个电阻电容构成了一个同向放大器,就是这么简单。 为了便…...
thymeleaf模板注入学习与研究--查找与防御
一、日常编码中常见的两种漏洞场景 1.1 模板参数外部可控 RequestMapping("/path")public String path(RequestParam String lang) {return lang ;}实际开发过程中 依靠我丰富的想象力只能想出 换主题 这种场景下可能会出现 大佬们自行脑补吧。 1.2 使用GetMappin…...
第七章:Linux最小化搭建环境解说2
配置IP地址:我们先要到网卡配置文件夹里,路径是/etc/sysconfig/network-scripts/,有点长,不过没事,我们要学会习惯,这还是经常用的。然后就是用ls命令查看下面有什么,只有一个文件ifcfg-ens160&…...
两道链表经典算法题---链表有无环(基础+进阶)
生活就像一盒巧克力,你永远不知道你会得到什么。——《阿甘正传》目前自己粗略的学完数据结构,正在开始刷算法题目。个人觉得算法是一个积累,循序渐进的的过程,需要不断加量,进而达到所谓的质。链表作为数据结构一个重…...
2023/1/14总结
今天学习的是c语法知识。 容器arry: 通俗来说这个容器就i是c语言的数组,和C中vevtor不同,arry是定长度的,而vector是动态数组。头文件为:<arry> 初始化: arry<数据类型,你所要声明…...
Python 之 NumPy 统计函数、数据类型和文件操作
文章目录一、统计函数1. 求平均值 mean()2. 中位数 np.median3. 标准差 ndarray.std4. 方差 ndarray.var()5. 最大值 ndarray.max()6. 最小值 ndarray.min()7. 求和 ndarray.sum()8. 加权平均值 numpy.average()二、数据类型1. 数据存储2. 定义结构化数据3. 结构化数据操作三、…...
互联网新时代要到来了(一)什么是Web3.0?
什么是Web3.0? tips:内容来自百度百科、知乎、搜狐新闻、李留白公众号、CSDN「Meta.Qing」博客等网页 什么是Web3.0?1.什么是Web3.0(概念介绍)?2.Web3.0简单理解3.Web3.0的技术特点4.Web3.0项目1.什么是Web3.0(概念…...
[Yocto] 直接向deploy/images目录部署binary
最近用yocto的时候碰到一个问题,有一些IP的FW binary是从别的地方直接拿来的,没有source code,有一个需求就是需要把它用wks script的方式把它们打包到最后的image里,这篇文章就是来谈谈这个问题。 yocto patch/deploy等做了什么 首先,虽然我们的code,bbfile,或者说pa…...
HarmonyOS Connect原子化服务功能开发(Wi-Fi/Combo)设备控制开发与实现(二)
规设备控制 在“device”目录下的“DeviceApplication.java”文件中,在onInitialize函数中初始化应用。示例代码如下: Override public void onInitialize() {AiLifeServiceHelper.initApplication(this);DeviceHandlerAbility.register(this, "&qu…...
论文开题不再愁!书匠策AI来助你一臂之力
在学术的浩瀚海洋中,每一位扬帆起航的学子都渴望找到那座指引方向的灯塔,尤其是在撰写论文开题报告这一关键时刻。开题报告,作为论文的起点,不仅承载着研究的方向与目的,更是展现研究者学术素养与创新能力的重要窗口。…...
Polars 2.0清洗效能天花板在哪?我们用金融/电商/物联网三大行业真实数据集压力测试后,终于敢说这句话
第一章:Polars 2.0清洗效能天花板在哪?我们用金融/电商/物联网三大行业真实数据集压力测试后,终于敢说这句话为精准定位 Polars 2.0 在真实业务场景下的清洗性能边界,我们构建了三类高保真数据集:金融领域(…...
Python内存泄漏自动拦截方案(CPython 3.8+内核级策略大揭秘)
第一章:Python内存泄漏自动拦截方案(CPython 3.8内核级策略大揭秘)CPython 3.8 引入的 tracemalloc 增强机制与对象生命周期钩子(PyObject_New, PyObject_Free 的可插拔拦截点),为内存泄漏的实时感知与自动…...
揭秘AI_NovelGenerator:重构长篇小说创作的智能架构
揭秘AI_NovelGenerator:重构长篇小说创作的智能架构 【免费下载链接】AI_NovelGenerator 使用ai生成多章节的长篇小说,自动衔接上下文、伏笔 项目地址: https://gitcode.com/GitHub_Trending/ai/AI_NovelGenerator 传统长篇小说创作面临三大核心痛…...
4个实战场景下的AssetStudio高效资源处理系统:Unity资产逆向工程最佳实践
4个实战场景下的AssetStudio高效资源处理系统:Unity资产逆向工程最佳实践 【免费下载链接】AssetStudio AssetStudio is an independent tool for exploring, extracting and exporting assets. 项目地址: https://gitcode.com/gh_mirrors/ass/AssetStudio A…...
计算机毕业设计springboot月知晓彩妆销售系统 SpringBoot美妆臻选在线商城系统 基于SpringBoot的“妆点人生“化妆品零售平台
计算机毕业设计springboot月知晓彩妆销售系统bq58y9 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。在颜值经济蓬勃发展的当下,化妆品电商市场持续高速增长。传统线下…...
GraphQL.NET依赖注入终极指南:7个MicrosoftDI扩展最佳实践
GraphQL.NET依赖注入终极指南:7个MicrosoftDI扩展最佳实践 【免费下载链接】graphql-dotnet GraphQL for .NET 项目地址: https://gitcode.com/gh_mirrors/gr/graphql-dotnet GraphQL.NET 作为 .NET 生态系统中功能最强大的 GraphQL 实现框架,其依…...
Nanobot知识图谱:Neo4j数据库集成指南
Nanobot知识图谱:Neo4j数据库集成指南 1. 引言 想象一下,你的AI助手不仅能回答简单问题,还能理解复杂的关系网络——比如公司内部的汇报关系、产品之间的关联性,甚至是学术文献中的引用关系。这就是知识图谱的魅力所在。 在实际…...
SEO_10个提升网站排名的实用SEO技巧分享(490 )
SEO: 10个提升网站排名的实用SEO技巧分享 在数字化时代,网站排名直接关系到网站的流量和用户转化率。如果你希望在百度上提升网站排名,那么你需要掌握一些实用的SEO技巧。本文将为你分享10个提升网站排名的实用SEO技巧,希望能帮助你在竞争激烈…...
Claude官网技术深度拆解:宪法AI与可控生成的技术哲学
在2026年的大模型阵营中,Anthropic的Claude系列以其独特的“宪法AI”理念和稳健的工程实现,走出了一条与OpenAI、Google截然不同的技术路径。当GPT追求“全能”、Gemini强调“多模态融合”、Grok偏向“风格化表达”时,Claude始终将安全可控、…...
