当前位置: 首页 > news >正文

Mybatis-puls——条件查询的三种格式+条件查询null判定+查询投影

前言

在mybatis_plus的封装中的Wrapper<T>接口参数就是用于封装查询条件 

 在测试类中启动如上一个简单的查询,然后控制台运行会输出一大堆无关日志,这里先把这些日志关闭

 去除无关日志文件

先新建一个XML配置文件 

 然后变成如下,这里configuration标签里面什么都没有配置就是取消所有日志文件了

然后再次启动就只剩下spring和mybatis的图标了

 

这两个图标也可以消去,在application.yml中关闭mybatis的banner的显示,选择false

 再设置spring的banner-mode为off就可以把spring的banner一起关掉了

 再次运行就可以看见一个没有多余日志输出的界面了

 按条件查询的三种方式

 要实现按条件查询,进入到selectlist的源码里面看见需要一个wrapper的对象,在wrapper源码中可以看见wrapper<T>是一个抽象类如下。

 在Wrapper这个抽象类下面还有一系列的实现类,这里要用到的是QueryWrapper这个实现类,专门用于做查询封装操作的,下面还有一些诸如updatewrapper用于更新操作的 

设置查询条件(and关系)

方式一

如下所示新建了一个QueryWrapper对象,然后设置了两个条件

	@Testvoid contextLoads() {//方式一:按条件查询QueryWrapper qw=new QueryWrapper();//age小于25qw.lt("age",25);//age大于17qw.gt("age",17);List<mpdb>  userlist=userDao.selectList(qw);System.out.println(userlist);}

 然后输出正常

 方式二

        //方式二:lambda格式按条件查询QueryWrapper<mpdb> qw=new QueryWrapper<mpdb>();qw.lambda().lt(mpdb::getAge,25);qw.lambda().gt(mpdb::getAge,17);List<mpdb>  userlist=userDao.selectList(qw);System.out.println(userlist);

同样正常输出 ,并且防止了因为字段名写错而找不到出错地方

 方式三

在方式二上简化了

       // 方式三:lambda格式按条件查询LambdaQueryWrapper<mpdb> lqw=new LambdaQueryWrapper<mpdb>();lqw.lt(mpdb::getAge,25);lqw.gt(mpdb::getAge,17);List<mpdb>  userlist=userDao.selectList(lqw);System.out.println(userlist);

输出结果依旧正确

三种方式大部分都推荐用第三种 ,第一种在特殊情况下才使用。

如果过条件过多可以采用这种链式编程的方式 

设置查询条件(or关系)

条件语句里面加上一个.or()

        lqw.lt(mpdb::getAge,25).or().gt(mpdb::getAge,17);

NULL值处理

应用场景如下,有空值到后台时要有对应的处理 

这里到先到pojo层或者说domain层下面新建一个实体类mpdbQuery用于封装条件查询的条件

,这里直接继承mpdb实体类即可

  然后要分析可能有哪些字段有范围,比如日期型有范围,数值型也有范围,在该表中只有age有限制,所以新建一个age2用于描述年龄的上限,收集来的age属性用于描述下限。

准备好后在测试类中如下

正常输出

 如果有一个为空的话会有如下,查询失败

 在lt方法还有第二种实现,传一个boolean类型 

 lt的代码变成如下,如果的判断不成立就不加入该条件。原本上面的都是无条件加入条件

        lqw.lt(null!=mq.getAge2(),mpdb::getAge,mq.getAge2());

 当然,也可以用if判断,但是每个都要加的话就太多了

查询投影

所谓查询投影就是设置查询出来的结果是什么样,达成只显示其中的某一些字段

使用如下的一个select方法,参数就是要投影的字段名

  LambdaQueryWrapper<mpdb> lqw=new LambdaQueryWrapper<mpdb>();lqw.select(mpdb::getId,mpdb::getName,mpdb::getAge);List<mpdb>  userlist=userDao.selectList(lqw);System.out.println(userlist);

输出如下,只有那三个字段

 上面这个是lambda格式专用。

如果是用第一种方法的话就要变成如下

        //非lambda格式的投影QueryWrapper<mpdb> lqw=new QueryWrapper<mpdb>();lqw.select("id","name","age","tel");List<mpdb>  userlist=userDao.selectList(lqw);System.out.println(userlist);

输出如下

 针对count(*)的查询投影

查询投影只能用这个方式来做,不能用lambda方式

如果要查询count(*)的话因为实体类没有对应的用于接收count(*)的字段,所以这里换一个方式接收,改成如下,String就是字段名,object就是值

这里as count的作用是起别名 

 输出如下

 分组查询

使用groupBy方法

 输出如下,每一组tel都有对应的数量

 小结

 如果有不支持的格式的话就要恢复最早写mybatis的格式来写这了,在DAO层中使用@Select注解的方式

相关文章:

Mybatis-puls——条件查询的三种格式+条件查询null判定+查询投影

前言 在mybatis_plus的封装中的Wrapper<T>接口参数就是用于封装查询条件 在测试类中启动如上一个简单的查询&#xff0c;然后控制台运行会输出一大堆无关日志&#xff0c;这里先把这些日志关闭 去除无关日志文件 先新建一个XML配置文件 然后变成如下&#xff0c;这里…...

网络安全(黑客)自学

建议一&#xff1a;黑客七个等级 黑客&#xff0c;对很多人来说充满诱惑力。很多人可以发现这门领域如同任何一门领域&#xff0c;越深入越敬畏&#xff0c;知识如海洋&#xff0c;黑客也存在一些等级&#xff0c;参考知道创宇 CEO ic&#xff08;世界顶级黑客团队 0x557 成员…...

通过一个实际例子说明Django中的数据库操作方法OneToOneField()的用法【数据表“一对一”关系】

当我们在Django中定义一个模型时&#xff0c;可以使用OneToOneField来建立一个一对一的关系。这种关系表示两个模型之间的一种特殊关联&#xff0c;其中一个模型的实例只能与另一个模型的实例关联。 让我们以一个简单的示例来说明OneToOneField的用法。假设我们正在构建一个简…...

HarmonyOS学习路之开发篇—数据管理(对象关系映射数据库)

HarmonyOS对象关系映射&#xff08;Object Relational Mapping&#xff0c;ORM&#xff09;数据库是一款基于SQLite的数据库框架&#xff0c;屏蔽了底层SQLite数据库的SQL操作&#xff0c;针对实体和关系提供了增删改查等一系列的面向对象接口。应用开发者不必再去编写复杂的SQ…...

实验:验证TCP套接字传输的数据不存在数据边界

来源&#xff1a;《TCP/IP网络编程》 学习ing 自己动手&#xff0c;把坑踩一遍&#xff0c;也可以学习到很多。 Linux环境下: 客户端&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <…...

【网络】协议的定制与Json序列化和反序列化

文章目录 应用层初识TCP协议通讯流程定制协议再谈协议网络版本计算器Protocal.hppCalServerCalClient Json的安装 应用层 我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层 初识TCP协议通讯流程 建立链接和断开链接 基于TCP协议&#xff0c…...

浙大数据结构第一周最大子列和问题

题目详情&#xff1a; 给定K个整数组成的序列{ N1​, N2​, ..., NK​ }&#xff0c;“连续子列”被定义为{ Ni​, Ni1​, ..., Nj​ }&#xff0c;其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 }&#xff…...

Selenium基础 — Selenium自动化测试框架介绍

1、什么是selenium Selenium是一个用于Web应用程序测试的工具。只要在测试用例中把预期的用户行为与结果都描述出来&#xff0c;我们就得到了一个可以自动化运行的功能测试套件。Selenium测试套件直接运行在浏览器中&#xff0c;就像真正的用户在操作浏览器一样。Selenium也是…...

力扣竞赛勋章 | 排名分数计算脚本

文章目录 力扣竞赛勋章介绍竞赛评分算法脚本&#xff08;本文的重点内容&#xff09;运行结果 代码修改自&#xff1a;https://leetcode.cn/circle/discuss/6gnvEj/ 原帖子的代码无法正常运行。 力扣竞赛勋章介绍 https://leetcode.cn/circle/discuss/0fKGDu/ 如果你想知道自…...

win10 远程 ubuntu 18.04 桌面

win10 远程 ubuntu 18.04 桌面 我们要在Windows 10上远程连接到Ubuntu 18.04&#xff0c;您需要按照以下步骤进行设置&#xff1a; 1. 在Ubuntu 18.04上安装并启用远程桌面服务。打开终端&#xff0c;并运行以下命令来安装xrdp&#xff1a; sudo apt update sudo apt instal…...

c++ -- STL

【C/C】STL详解_cstl_沉晓的博客-CSDN博客 Learning Record have done assignment class template An excellent programmer only needs to know how to use containers to improve program encapsulation and reduce coupling, without understanding the underlying pri…...

文字识别(OCR)介绍与开源方案对比

目录 文字识别&#xff08;OCR&#xff09;介绍与开源方案对比 一、OCR是什么 二、OCR基本原理说明 三、OCR基本实现流程 四、OCR开源项目调研 1、tesseract 2、PaddleOC 3、EasyOCR 4、chineseocr 5、chineseocr_lite 6、cnocr 7、商业付费OCR 1&#xff09;腾讯…...

Modbus tcp转ETHERCAT在Modbus软件中的配置方法

Modbus tcp和ETHERCAT是两种不同的协议&#xff0c;这给工业生产带来了很大的麻烦&#xff0c;因为这两种设备之间无法通讯。但是&#xff0c;远创智控YC-ECT-TCP网关的出现&#xff0c;却为这个难题提供了解决方案。 YC-ECT-TCP网关能够连接到Modbus tcp总线和ETHERCAT总线中…...

开源点云数据集整理汇总

目录 一、ModelNet401. 网址2. 模型 二、ShapeNet1. 网址2. 模型 三、S3DIS Dataset1. 网址2. 模型 四、ScanNet1. 网址2. 模型 五、RGB-D Object Dataset1. 网址2. 模型 六、 NYU Depth Dataset V2 &#xff08;纽约大学深度数据集&#xff09;1. 网址2. 模型 七、 The Stanfo…...

【全栈开发指南】VUE前端路由设计及配置

我们在使用Vue.js时&#xff0c;创建单页面应用一定会用到路由&#xff0c;Vue Router 是 Vue.js 官方的路由管理器&#xff0c;我们在开发框架中过程中&#xff0c;需要结合Vue Router路由管理器提供的功能&#xff0c;设计和实现系统中菜单的配置。 一、实现原理 一级菜单r…...

C语言程序环境和预处理

本章主要以图片和文字的形式给大家讲解 程序的翻译环境和程序的执行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 第1种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令。 第2种是执行环境&#xff0c;它用于实际执行代码 2. 详解编译…...

为摸鱼助力:一份Vue3的生成式ElementPlus表单组件

目录 一、实现背景 二、简介 三、组织架构设计 四、实现方式 五、代码示例 六、示例代码效果预览 七、项目预览地址 & 项目源码地址 目前项目还有诸多待完善的地方&#xff0c;大家有好的想法、建议、意见等欢迎再次评论&#xff0c;或于github提交Issues 一、实现…...

数通工作中常见问题与解决方法

城域网&#xff0c;硬件&#xff0c;交换机开局 1、环路产生&#xff0c;现象&#xff0c;怎么解决 一般是物理拓扑存在环路&#xff0c;导致数据互传&#xff0c;Mac地址漂移&#xff0c;产生环路&#xff1b; Cpu利用率变高&#xff0c;端口流量接近100%&#xff0c;有mac…...

基于STM32+华为云IOT设计的智能浇花系统

一、前言 随着社会的不断发展和人们生活水平的逐渐提高,人们逐渐追求高质量的生活,很多人都会选择在家里或办公室种植一些花卉以净化家庭空气,陶冶情操,但是很多人忙于工作、学习、出差、旅游或者一些其他的原因,不能及时地对花卉进行照料,短时间内导致很多花卉因缺水分…...

回调函数(callback)是什么?

通俗易懂 你到一个商店买东西&#xff0c;刚好你要的东西没有货&#xff0c;于是你在店员那里留下了你的电话&#xff0c;过了几天店里有货了&#xff0c;店员就打了你的电话&#xff0c;然后你接到电话后就到店里去取了货。 在这个例子里&#xff0c;你的电话号码就叫回调函…...

Pixel Dream Workshop 助力前端开发:Vue.js 项目动态视觉素材生成指南

Pixel Dream Workshop 助力前端开发&#xff1a;Vue.js 项目动态视觉素材生成指南 1. 为什么前端开发者需要关注视觉素材生成 作为一名Vue.js开发者&#xff0c;你可能经常遇到这样的困扰&#xff1a;产品经理突然要求给新功能加个炫酷的Banner图&#xff0c;设计师资源紧张排…...

Agent能为中小企业降本增效吗?深度拆解AI Agent在企业智能自动化的落地路径

在2026年这一关键的时间节点上&#xff0c;AI Agent能否为中小企业实现实质性的降本增效&#xff0c;已经从一个理论命题转变为大规模的实践成果。随着大模型技术的深度演进&#xff0c;AI Agent不再仅仅是简单的对话机器人&#xff0c;而是进化为具备自主规划、决策与执行能力…...

系统移植-STM32MP1_TF-A概述

文章目录 1 设备安全2 TF-A简介3 ARMv7和ARMv8权限等级3.1 ARMv7-A工作模式3.2 ARMv8工作模式 4 TF-A不同启动阶段4.1 bl14.2 bl24.3 bl314.4 bl324.5 bl33 5 STM32MP1中的TF-A5.1 STM32MP1_TF-A框架5.1.1 STM32MP1下的bl15.1.2 STM32MP1下的bl25.1.3 STM32MP1下的bl325.1.4 ST…...

手把手教你用ChatGPT-Next-Web(NextChat)免费搭建个人AI助手网站(附Docker部署)

零代码实战&#xff1a;用ChatGPT-Next-Web快速搭建专属AI对话平台 在AI技术平民化的浪潮中&#xff0c;拥有一个私人定制的智能对话平台不再是大公司的专利。ChatGPT-Next-Web&#xff08;原名NextChat&#xff09;作为GitHub上最受欢迎的AI界面开源项目之一&#xff0c;让普…...

LeetCodehot100-25 K 个一组翻转链表

class Solution { public:ListNode* reverseKGroup(ListNode* head, int k) {if (head nullptr || k 1) return head;ListNode dummy(0);dummy.next head;ListNode* prev &dummy; // 指向待反转组的前一个节点while (true) {// 检查剩余节点是否够k个ListNode* tail …...

SlopeCraft终极指南:如何轻松将任何图片转换为Minecraft立体地图画

SlopeCraft终极指南&#xff1a;如何轻松将任何图片转换为Minecraft立体地图画 【免费下载链接】SlopeCraft Map Pixel Art Generator for Minecraft 项目地址: https://gitcode.com/gh_mirrors/sl/SlopeCraft 你是否曾梦想将心爱的照片、动漫角色或艺术作品搬进Minecra…...

Base64隐写术逆向工程:从CTF题到自制解密工具(Python实现)

Base64隐写术逆向工程&#xff1a;从CTF题到自制解密工具&#xff08;Python实现&#xff09; 1. Base64编码原理与隐写空间 Base64编码的本质是将二进制数据转换为由64个可打印字符&#xff08;A-Z、a-z、0-9、、/&#xff09;组成的ASCII字符串。每个Base64字符对应6位二进制…...

5G NR PUSCH实战:手把手教你理解Type A/B时域映射与SLIV计算(附避坑指南)

5G NR PUSCH实战&#xff1a;Type A/B时域映射与SLIV计算全解析 从理论到实践&#xff1a;PUSCH时域资源分配的核心逻辑 在5G NR系统中&#xff0c;物理上行共享信道&#xff08;PUSCH&#xff09;的时域资源分配直接决定了上行数据传输的效率和可靠性。对于物理层开发工程师而…...

别再手动装Office了!用Docker和LinuxServer.io镜像,5分钟搞定LibreOffice在线办公环境

5分钟极速部署&#xff1a;用Docker打造即开即用的LibreOffice云办公环境 你是否经历过这样的崩溃时刻&#xff1f;临时需要处理一份文档&#xff0c;却发现系统里的办公软件版本老旧、字体缺失&#xff1b;或是刚重装系统&#xff0c;又要花半小时等待Office安装进度条爬完。更…...

智能客服原型开发:OpenClaw+Qwen3-32B搭建对话系统

智能客服原型开发&#xff1a;OpenClawQwen3-32B搭建对话系统 1. 为什么选择这个技术栈&#xff1f; 去年我接手了一个智能客服系统的预研项目&#xff0c;客户要求两周内交付可演示的原型。传统方案需要前后端开发、对话引擎集成、工单系统对接&#xff0c;时间根本不够。最…...