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

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构

React 实战项目&#xff1a;微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇&#xff01;在前 29 篇文章中&#xff0c;我们从 React 的基础概念逐步深入到高级技巧&#xff0c;涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...