当前位置: 首页 > 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;对结果集进行转化…...

Unittest加载执行用例的方法总结

前言 说到测试框架&#xff0c;unittest是我最先接触的自动化测试框架之一了&#xff0c; 而且也是用的时间最长的&#xff0c; unittest框架有很多方法加载用例&#xff0c;让我们针对不同的项目&#xff0c;不同项目的大小及用例的多少自己选择加载方式。今天我们就简单的说说…...

使用预训练的2D扩散模型改进3D成像

扩散模型已经成为一种新的生成高质量样本的生成模型&#xff0c;也被作为有效的逆问题求解器。然而&#xff0c;由于生成过程仍然处于相同的高维&#xff08;即与数据维相同&#xff09;空间中&#xff0c;极高的内存和计算成本导致模型尚未扩展到3D逆问题。在本文中&#xff0…...

微服务测试是什么?

微服务测试是一种特殊的测试类型&#xff0c;因为它涉及到多个独立的服务。以下是进行微服务测试的一般性步骤&#xff1a; 【B站最通俗易懂】Python接口自动化测试从入门到精通&#xff0c;超详细的进阶教程&#xff0c;看完这套视频就够了 1. 确定系统架构 了解微服务架构对…...

《现代C++教程》笔记(5-7)

文章目录 5 智能指针与内存管理5.1 RAII与引用计数5.2 std::shared_ptr5.3 std::unique_ptr5.4 std::weak_ptr 6 正则表达式7 并行与并发7.1 并行基础7.2 互斥量与临界区7.3 期物7.4 条件变量7.5 原子操作与内存模型 5 智能指针与内存管理 5.1 RAII与引用计数 在传统 C 中&am…...

红黑树深入剖析【C++】

目录 一、红黑树概念 二、红黑树节点结构设计 三、插入操作 处理情况1 处理情况2 处理情况3 插入总结&#xff1a; 四、插入操作源码 五、红黑树验证 一、红黑树概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0…...

教育机构视频播放时观看行为分析有哪些应用?

教育机构视频播放时观看行为分析有哪些应用&#xff1f; 观看行为分析 观看行为分析是指我们平台基于视频大数据分析&#xff0c;能够以秒为粒度展示观众如何观看您的视频。 视频观看热力图是单次观看行为的图形化表示&#xff0c;我们平台云点播视频的每一次播放&#xff0…...

Jmeter+验证json结果是否正确小技巧

前言&#xff1a; 通过sql语句或者返回的参数&#xff0c;可以在查看结果树返回的结果中&#xff0c;用方法先跑一下验证是否取到自己想要的值 步骤&#xff1a; 1、添加查看结果树 2、跑出结果 3、在查看结果树中 text改成选Json Path Tester 返回的值如果是列表里面的字符…...

Spring 6.0官方文档示例(22): singleton类型的bean和prototype类型的bean协同工作的方法(一)

一、配置文件&#xff1a; <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:context"http://www.springframework.org/schema/context"xsi:schemaLocation"http…...

Android平台GB28181设备接入侧如何同时对外输出RTSP流?

技术背景 GB28181的应用场景非常广泛&#xff0c;如公共安全、交通管理、企业安全、教育、医疗等众多领域&#xff0c;细分场景可用于如执法记录仪、智能安全帽、智能监控、智慧零售、智慧教育、远程办公、明厨亮灶、智慧交通、智慧工地、雪亮工程、平安乡村、生产运输、车载终…...

el-Cascader 中div上绑定keyDown事件

keydown&#xff0c;keyup&#xff0c;keypress 事件默认是给页面上可以聚焦的元素绑定键盘事件&#xff0c;例如input输入框&#xff0c;点击输入框即代表聚焦在该元素上。那么想要给div或者其他不能聚焦的元素上使用键盘事件怎么处理呢&#xff1f;这里用到tabindex属性。 …...