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

MyBatisPlus从入门到精通-2

接着上一讲的Mp的分页功能
下面我们讲解条件查询功能和其他功能

解决一下日志输出和banner问题

每次卞就会输出这些日志
很不美观,现在我们关闭一下
在这里插入图片描述
这样建个xml,文件名为logback.xml
在这里插入图片描述
文件内容改成这样
配置了logback但是里面什么都没写就不会说有日志输出
在这里插入图片描述
然后运行的话可以发现日志没了
但是对应的banner还在,就是这个spring和mp的表示啊
下面我们做的就是取消一下这个
在这里插入图片描述
更改一下spring配置文件即可
在这里插入图片描述

spring:datasource:druid:driver-class-name: com.mysql.cj.jdbc.Driver   # mysql 驱动url: jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8&serverTimezone=UTC  # 连接数据库username: root    # 数据库账户password: 123456    # 数据库密码#关闭spring的bannermain:banner-mode: off#关闭Mp的banner
mybatis-plus:global-config:banner: false

现在就什么都没有了
在这里插入图片描述

条件查询

条件查询之前mybatis是写到一个对应mapper的xml里面
然后用各种标签做标注
而Mp中我们是用Wrapper这个参数封装查询条件
在这里插入图片描述

设置查询条件方式

方式1(普通方式)

Wrapper是个抽象类,他也有许多实现类
这个QueryWarpper就是我们以用来封装条件查询的实现类
在这里插入图片描述

  @Testvoid testGetAll(){//创建QueryyWarpper查询对象QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();//在里面增添条件,lt代表<(小于),gt代表>(大于)userQueryWrapper.lt("age",22);
//      再把我们的对象加入到我们的查询中即可完成条件查询List<User> users = userDao.selectList(userQueryWrapper);for (User use:users) {System.out.println(use);}}

可以看到查询到的结果是正确的
在这里插入图片描述

在这里插入图片描述

方式2 lambda方式

我们就封装条件写
qw.lt(“列名”,值)
列名会很容易打错,也不好发现
so出现了这种方式和方式1差不多
如图
现在属性名就不会写错了
在这里插入图片描述

方式3 LambdaQueryWarpper(!)

用方式2需要一直写lambda
mp提供一个LambdaQueryWarpper的实现类
可以直接写Lambda

@Testvoid testGetAll(){//新的实现类LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<>();//可以直接写lambda格式userLambdaQueryWrapper.lt(User::getAge,22);List<User> users = userDao.selectList(userLambdaQueryWrapper);for (User use:users) {System.out.println(use);}}

也可以成功运行
在这里插入图片描述

条件之间的多重组合

比如说and和or这种怎么表示呢
and好说
你可以再封装一次把另一个条件加入搭配Warpper对象中
比如这样,就是年龄大于10小于22

userLambdaQueryWrapper.lt(User::getAge,22);
userLambdaQueryWrapper.gt(User::getAge,10);

也可以用支持的链式编程
是同样的效果

userLambdaQueryWrapper.lt(User::getAge,22).gt(User::getAge,10);

那我们的or
也是用链式的
用到or()方法来代表
比如下面这行代码,表示小于(lt)10岁或者大于(gt)30岁

userLambdaQueryWrapper.lt(User::getAge,10).or().gt(User::getAge,30);

小结

在这里插入图片描述
在这里插入图片描述

null判定(参数)

像这种,如果不设置会受到一些null
如何处理null就是我们需要研究的问题
在这里插入图片描述
我们先模拟一下前端传送的数据模型(实际开发是用不到的)
我们需要新定义一个查询条件类作为数据模型
因为age可能有上下限(分析哪些属性可能有上下限这种)
不能只用有一个age来表示
写一个查询条件类,设一个age2代表上限 age代表下限
在这里插入图片描述
正常操作,无null情况
小于30大于10
这个结果是正确的我就不展示了
在这里插入图片描述
如果没有传下限的情况
我们想的是介绍找30岁以下的
而运行的是age 在 null 和 30岁之间的
这样就会失败
应该是我们没有设置就是nul的情况对应的条件不应该往上连
怎么解决呢(我这里不说if条件判断这个大家都应该会)
在这里插入图片描述
还是我们的内置方法
重载方法,条件方法一般有一个condition
如果是true的话就连接上,如果是false就不进行条件连接

在这里插入图片描述
更改后的格式
这样就正确了
在这里插入图片描述

小结

在这里插入图片描述

在这里插入图片描述

查询投影/分组统计(查询字段控制,含函数字段如count(*))

查询投影就是控制我们查询行
我们要查询什么列
比如这个
就是我们只查询对应的id name和age 其他的都不查询,这个是LambdaQueryWarpper的格式
如果是正常的QueryWarpper看图2
在这里插入图片描述
在这里插入图片描述
说一些不止是字段的
当我们想统计count(*)就是数据总数的时候
只能用QueryWarpper来做
这样直接运行肯定是不对的,因为我们返回值是User的List集合
是没有count的对应字段所以没法封装
在这里插入图片描述
我们需要另一个方法
返回Map双列集合
user.Dao()selectMap(lqw);
会把我们对应的查询变为key查询到的值变为value显示
在这里插入图片描述
也可以进行一些分组统计
分组统计就是基于查询投影的(和sql语句内核是一样的)
在这里插入图片描述

各种查询条件对应方法

就这些老朋友
在Mp里面对于的函数
在这里插入图片描述
=匹配
对应函数
eq()

如图查询的是名字为Jerry且密码为jerry的用户
且这种只查询一个用户的,可以用selectOne
不用selectList
在这里插入图片描述
范围查询

lt <
le <=
gt >
ge >=
between(,下限,上限) 应该是和sql语句一样 左闭右闭[]

查询age【10,30】的员工
在这里插入图片描述
模糊匹配
like
除了接收判断null参数的
还有likeRight和likeLeft是对应%的位置
比如你
lqw.likeRight(User::getName,“J”);
这个时候%就会加在右边匹配的是J%就是以J开头的名字
likeLeft同理
在这里插入图片描述

小结

在这里插入图片描述
在这里插入图片描述可以在Mp官网上看对应方法
熟能生巧

映射匹配兼容性

就sql和我们的java实体类的映射问题
在这里插入图片描述
在这里插入图片描述

问题1:数据库和实体类字段名不同
如果同名就自动映射
不同的话,就要修改
不修改会按照实体类的属性名查询表中没有这个字段会报错的如图
在这里插入图片描述

在这里插入图片描述
一般都是实体类进行修改,但是要一个一个修改是不方便的
解决方法
用Mp提供的注解
@TableField(value=“表中字段名”)
在这里插入图片描述

问题2:实体类比数据库字段多
就是一些属性是不需要在数据库存储的
但是需要在外面的实体类定义
比如就在线这个属性online也是要查询的,但是不会放到数据库里
但是我们查询的时候,比如查询全表是java编程在做
语句就会是select id,…,online from 表
但表里没有这个字段,这样就会报错
如图
在这里插入图片描述
解决办法
在这里插入图片描述
我们只需要@TableFiled(exist=false)即可说明这个属性在表里不存在
在这里插入图片描述
问题3:默认使用select方法会查询所有值
不安全,比如查询到密码,返回的json用户就能看到密码
除了手动去投影
还可以用注解来
@TableField(select=false)
就是这个字段不参与查询
在这里插入图片描述

问题4:表明和类名不同
因为什么呢
因为组成语句 select … from 类名小写
可以看出来对应关系
在这里插入图片描述

这个默认是类名小写,类名表名不同就查询不到
可以写@TableName(“表名”)在类上来解决
在这里插入图片描述

相关文章:

MyBatisPlus从入门到精通-2

接着上一讲的Mp的分页功能 下面我们讲解条件查询功能和其他功能 解决一下日志输出和banner问题 每次卞就会输出这些日志 很不美观&#xff0c;现在我们关闭一下 这样建个xml&#xff0c;文件名为logback.xml 文件内容改成这样 配置了logback但是里面什么都没写就不会说有日…...

AI面试官:Asp.Net 中使用Log4Net (一)

AI面试官&#xff1a;Asp.Net 中使用Log4Net (一) 当面试涉及到使用log4net日志记录框架的相关问题时&#xff0c;通常会聚焦在如何在.NET或.NET Core应用程序中集成和使用log4net。以下是一些关于log4net的面试题目&#xff0c;以及相应的解答、案例和代码&#xff1a; 文章目…...

Selenium自动化元素定位方式与浏览器测试脚本

Selenium八大元素定位方法 Selenium可以驱动浏览器完成各种操作&#xff0c;比如模拟点击等。要想操作一个元素&#xff0c;首先应该识别这个元素。人有各种的特征&#xff08;属性&#xff09;&#xff0c;我们可以通过其特征找到人&#xff0c;如通过身份证号、姓名、家庭住…...

人机交互与人机混合智能的区别

人机交互和人机融合智能是两个相关但不完全相同的概念&#xff1a; 人机交互是指人与计算机之间的信息交流和互动过程。它关注的是如何设计和实现用户友好的界面&#xff0c;以便人们能够方便、高效地与计算机进行沟通和操作。人机交互通常强调用户体验和界面设计&#xff0c;旨…...

【项目】轻量级HTTP服务器

文章目录 一、项目介绍二、前置知识2.1 URI、URL、URN2.2 CGI2.2.1 CGI的概念2.2.2 CGI模式的实现2.2.3 CGI的意义 三、项目设计3.1 日志的编写3.2 套接字编写3.3 HTTP服务器实现3.4 HTTP请求与响应结构3.5 EndPoint类的实现3.5.1 EndPoint的基本逻辑3.5.2 读取请求3.5.3 构建响…...

sketch如何在线打开?有没有什么软件可以辅助

Sketch 在线打开的方法有哪些&#xff1f;这个问题和我之前回答过的「Sketch 可以在线编辑吗&#xff1f;」是一样的答案&#xff0c;没有。很遗憾&#xff0c;Sketch 没有在线打开的方法&#xff0c;Sketch 也做不到可以在线编辑。那么&#xff0c;那些广告里出现的设计软件工…...

CSS Flex 笔记

1. Flexbox 术语 Flex 容器可以是<div> 等&#xff0c;对其设置属性&#xff1a;display: flex, justify-content 是沿主轴方向调整元素&#xff0c;align-items 是沿交叉轴对齐元素。 2. Cheatsheet 2.1 设置 Flex 容器&#xff0c;加粗的属性为默认值 2.1.1 align-it…...

Markdown常用标签及其用途-有示例

Markdown常用标签及其用途 Markdown是一种轻量级标记语言&#xff0c;具有简洁易读的特点。下面是一些常用的Markdown标签以及它们的用途&#xff0c;并附带一些示例&#xff1a; 标题 用于创建不同级别的标题&#xff0c;可通过添加一到六个#符号来表示不同级别的标题。 #…...

25.1 Knife4j-Swagger的增强插件

1.Knife4j概述 Knife4j是一款基于Swagger UI的增强插件&#xff0c;它可以为Spring Boot项目生成美观且易于使用的API文档界面。它是Swagger UI的增强版&#xff0c;提供了更多的功能和定制选项&#xff0c;使API文档更加易读和易于理解。 2.Knife4j使用 Knife4j 集Swagger2…...

用flask run代替flask run --debug

安装python-dotenv依赖。 在项目根目录下新建.flaskenv文件&#xff0c;并作如下配置&#xff1a; FLASK_ENVdevelopment FLASK_DEBUG1...

python_day14_综合案例

文件内容 导包配置 import jsonfrom pyspark import SparkContext, SparkConf import osos.environ["PYSPARK_PYTHON"] "D:/dev/python/python3.10.4/python.exe" os.environ["HADOOP_HOME"] "D:/dev/hadoop-3.0.0" conf SparkC…...

【算法题】2779. 数组的最大美丽值

题目&#xff1a; 给你一个下标从 0 开始的整数数组 nums 和一个 非负 整数 k 。 在一步操作中&#xff0c;你可以执行下述指令&#xff1a; 在范围 [0, nums.length - 1] 中选择一个 此前没有选过 的下标 i 。 将 nums[i] 替换为范围 [nums[i] - k, nums[i] k] 内的任一整…...

文件上传之PHP

别怕,我会一直陪着你 一.知识二.实例1.phtml, <?简单过滤2.前端验证, phtml3 \.htaccess 一.知识 绕过后缀的有文件格式有php,php3,php4,php5,phtml.pht 二.实例 1.phtml, <?简单过滤 (1)一句话木马 故意使用了post和get用来迷惑人 https://127.0.0.1/shy.php?POS…...

人脸检测实战-insightface

目录 简介 一、InsightFace介绍 二、安装 三、快速体验 四、代码实战 1、人脸检测 2、人脸识别 五、代码及示例图片链接 简介 目前github有非常多的人脸识别开源项目&#xff0c;下面列出几个常用的开源项目&#xff1a; 1、deepface 2、CompreFace 3、face_recogn…...

Linux工具【1】(编辑器vim、编译器gcc与g++)

vim详解 引言vimVim的三种模式及模式切换普通模式下操作底行模式下操作 gcc与ggcc的使用&#xff08;g类似&#xff09;预编译编译汇编链接静态库与动态库 总结 引言 vim&#xff08;vi improved&#xff09;编辑器是从 vi 发展出来的一个文本编辑器。 代码补全、编译及错误跳…...

基于Java+SpringBoot+vue前后端分离古典舞在线交流平台设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…...

MQ - 闲聊MQ一二事儿 (Kafka、RocketMQ 、Pulsar )

文章目录 MQ的发展史阶段一&#xff1a;追求解耦阶段二&#xff1a;追求吞吐量与一致性阶段三&#xff1a;追求平台化 MQ的通用架构主题topic、生产者producer、消费者consumer分区partition MQ 存储KafkaGood Design ---> 磁盘顺序写盘Poor Impact---> topic 数量不能过…...

Qt中的 QIODevice类(包含:随机访问、顺序访问设备)

QIODevice类 一、简介 QIODevice用于对输入输出设备进行管理&#xff0c;是Qt中所有I/O设备的基接口类。为支持读写数据块的设备(如QFile、QBuffer和QTcpSocket)提供了通用实现和抽象接口。 输入设备有2种类型&#xff1a; 一种是随机访问设备&#xff0c;QFile(文件)和QBuff…...

【JavaScript 07】函数声明 地位平等 函数提升 属性方法 作用域 参数 arguments对象 闭包 IIFE立即调用函数表达式 eval命令

函数 1 概述1.1 声明1.2 重复声明 1.3 圆括号/return/recursion1.4 一等公民1.5 函数提升 2 函数属性与方法2.1 name属性2.2 length属性2.3 toString() 3 函数作用域3.1 概念3.2 函数内部变量提升3.3 函数本身作用域 4 参数4.1 概念4.2 省略4.3 传递4.4 同名4.5 arguments 对象…...

MyBatis源码分析_ResultSetHandler(7)

目录 1. 传统JDBC 2. Mybatis访问数据库 2.1 Statement访问数据库 2.2 火枪手 ResultSetHandler 出现 3. ResultSetHandler处理结果集 3.1 首先就是进入 handleResultSets 方法 3.2 handleResultSet 方法根据映射规则&#xff08;resultMap&#xff09;对结果集进行转化…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...