Mybatis-Plus 06 条件构造器和常用接口

news2025/7/19 16:51:51

一、wapper介绍 请添加图片描述

Wrapper : 条件构造抽象类,最顶端父类

AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件

​ QueryWrapper : 查询条件封装

​ UpdateWrapper : Update 条件封装

AbstractLambdaWrapper : 使用Lambda 语法

​ LambdaQueryWrapper :用于Lambda语法使用的查询Wrapper

​ LambdaUpdateWrapper : Lambda 更新封装Wrapper

@SpringBootTest
public class QueryWrapperTests {
    
    @Autowired
    private UserMapper userMapper;
}

二、测试用例

1、ge、gt、le、lt、isNull、isNotNull

@Test
public void testDelete() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper
        .isNull("name")
        .ge("age", 12)
        .isNotNull("email");
    int result = userMapper.delete(queryWrapper);
    System.out.println("delete return count = " + result);
}



 @Test
    public void testSelectOne() {
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper
                .isNull(User::getName)
                .ge(User::getAge, 12)
                .isNotNull(User::getEmail);
        int result = userMapper.delete(queryWrapper);
        System.out.println("delete return count = " + result);
    }

2、eq、ne

**注意:**seletOne()返回的是一条实体记录,当出现多条时会报错

@Test
public void testSelectOne() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("name", "Tom");
    User user = userMapper.selectOne(queryWrapper);//只能返回一条记录,多余一条则抛出异常
    System.out.println(user);
}


    @Test
    public void testSelectOne() {
        LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<>();
        userLambdaQueryWrapper.eq(User::getName, "Tom");
        User user = userMapper.selectOne(userLambdaQueryWrapper);//只能返回一条记录,多余一条则抛出异常
        System.out.println(user);
    }

3、between、notBetween

包含大小边界

@Test
public void testSelectCount() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.between("age", 20, 30);
    Long count = userMapper.selectCount(queryWrapper); //返回数据数量
    System.out.println(count);
}


    @Test
    public void testSelectCount() {
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.between(User::getAge, 20, 30);
        Long count = userMapper.selectCount(queryWrapper);//返回数据数量
        System.out.println(count);
    }

SELECT COUNT( * ) FROM t_user WHERE deleted=0 AND (age BETWEEN ? AND ?)

4、like、notLike、likeLeft、likeRight

selectMaps()返回Map集合列表,通常配合select()使用

@Test
public void testSelectMaps() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper
        .select("name", "age")
        .like("name", "e")
        .likeRight("email", "5");
    List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);//返回值是Map列表
    maps.forEach(System.out::println);
}

5、in、notIn、inSql、notinSql、exists、notExists

in、notIn:

notIn("age",{1,2,3})--->age not in (1,2,3)notIn("age", 1, 2, 3)--->age not in (1,2,3)

inSql、notinSql:可以实现子查询

  • 例: inSql("age", "1,2,3,4,5,6")—>age in (1,2,3,4,5,6)
  • 例: inSql("id", "select id from table where id < 3")—>id in (select id from table where id < 3)
    @Test
    public void testSelectObjs() {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
//        queryWrapper.in("id", 1, 2, 3);
        queryWrapper.inSql("id", "select id from user where id <= 3");
        List<Object> objects = userMapper.selectObjs(queryWrapper);//返回值是Object列表
        objects.forEach(System.out::println);
    }

6、or、and

**注意:**这里使用的是 UpdateWrapper

不调用or则默认为使用 and

@Test
public void testUpdate1() {
    //修改值
    User user = new User();
    user.setAge(99);
    user.setName("Andy");
    //修改条件
    UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
    userUpdateWrapper
        .like("name", "h")
        .or()
        .between("age", 20, 30);
    int result = userMapper.update(user, userUpdateWrapper);
    System.out.println(result);
}

7、lambda表达式

lambda表达式内的逻辑优先运算

@Test
public void testUpdate2() {
    //修改值
    User user = new User();
    user.setAge(99);
    user.setName("Andy");
    //修改条件
    UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
    userUpdateWrapper
        .like("name", "n")
        .or(i -> i.like("name", "a").eq("age", 20));
    int result = userMapper.update(user, userUpdateWrapper);
    System.out.println(result);
}

8、orderBy、orderByDesc、orderByAsc

@Test
public void testSelectListOrderBy() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.orderByDesc("age", "id");
    List<User> users = userMapper.selectList(queryWrapper);
    users.forEach(System.out::println);
}

9、set、setSql

最终的sql会合并 user.setAge(),以及 userUpdateWrapper.set() 和 setSql() 中 的字段

@Test
public void testUpdateSet() {
    //修改值
    User user = new User();
    user.setAge(60);
    //修改条件
    UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
    userUpdateWrapper
        .like("name", "h")
        .set("name", "Peter")//除了可以查询还可以使用set设置修改的字段
        .setSql(" email = '943697678@qq.com'");//可以有子查询
    int result = userMapper.update(user, userUpdateWrapper);
}

三、查询方式

查询方式说明
setSqlSelect设置 SELECT 查询字段
whereWHERE 语句,拼接 + WHERE 条件
andAND 语句,拼接 + AND 字段=值
andNewAND 语句,拼接 + AND (字段=值)
orOR 语句,拼接 + OR 字段=值
orNewOR 语句,拼接 + OR (字段=值)
eq等于=
allEq基于 map 内容等于=
ne不等于<>
gt大于>
ge大于等于>=
lt小于<
le小于等于<=
like模糊查询 LIKE
notLike模糊查询 NOT LIKE
inIN 查询
notInNOT IN 查询
isNullNULL 值查询
isNotNullIS NOT NULL
groupBy分组 GROUP BY
havingHAVING 关键词
orderBy排序 ORDER BY
orderAscASC 排序 ORDER BY
orderDescDESC 排序 ORDER BY
existsEXISTS 条件语句
notExistsNOT EXISTS 条件语句
betweenBETWEEN 条件语句
notBetweenNOT BETWEEN 条件语句
addFilter自由拼接 SQL
last拼接在最后,例如:last(“LIMIT 1”)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/36163.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PG::Inclusiveness

nmap -Pn -p- -T4 --min-rate1000 192.168.134.14 nmap -Pn -p 21,22,80 -sCV 192.168.134.14 80端口是默认页面&#xff0c;先查看21端口FTP服务的匿名登录&#xff0c;并未发现可利用信息。 继续查看80端口&#xff0c;在robots.txt中得到提示。 https://www.howtogeek.co…

【Kubernetes | Pod 系列】Pod的 YAML 清单文件详解

目录3. Pod的 YAML 清单文件3.1 获取资源对象 YAML3.2 解析 YAML 清单文件&#xff08;1&#xff09;apiVersion查看 Kubernetes API 中全部的 API 组&#xff08;2&#xff09;kind查看 Kubernetes 中全部的对象资源类型&#xff08;3&#xff09;metadata&#xff08;4&#…

SpringBoot整合Mybatis方式2:使用注解方式整合Mybatis

SpringBoot整合Mybatis简介SpringBoot整合Mybatis方式2&#xff1a;使用注解方式整合Mybatis1.先用idea创建一个添加mybatis需要的相关依赖的工程。2.准备数据库和表3.创建表映射类4.创建mapper代理接口5.创建Service层和Service的实现层6.创建控制层&#xff08;也就是web层&a…

JQuery使用

简介 一个JavaScript的框架&#xff0c;简化了JS的语法和操作&#xff0c;定义了HTML属性操作、样式操作、DOM 操作等相关函数&#xff0c;实现了对ajax异步请求封装。提供了很多预定义函数的JS文件。 作用 简化部分JavaScript开发 使用步骤 1,引入Jquery 下载 地址1:http:/…

D-0015 红外接收硬件电路设计

红外接收硬件电路设计1 简介2 硬件电路实战3 红外遥控的原理4 主要参数5 电路设计要点1 简介 肉眼可见的光&#xff0c;按照波长进行排列依次为&#xff1a;红、成、黄、绿、青、蓝、紫。其中红光的波长范围为0.620.76μm&#xff1b;紫光的波长范围为0.380.46μm。比紫光波长…

[iOS]代码混淆

混淆有几点注意&#xff1a; 不能混淆系统方法 不能混淆init开头的等初始化方法 混淆属性时需要额外注意set方法 如果xib、 storyboard中用到了混淆的内容&#xff0c;需要手动修正。 可以考虑把需要混淆的符号都加上前缀&#xff0c;跟系统自带的符号进行区分。 混淆有风险&am…

MMEdu离线版的使用:实现石头剪刀布图像分类的检测

一、MMEdu离线版的使用 1.双击XEdu v1.0.exe解压缩到某个盘&#xff0c;会是一个文件夹XEdu 2.进入XEdu&#xff0c;双击运行“点我初始化.bat”&#xff0c;等待至运行结束命令提示符窗口自动关闭 3.双击运行“jupyter编辑器.bat”&#xff0c;将会打开一个网页版jupyter&…

记一次由于google新版本限制升级导致的跨域问题

记一次跨域问题 问题描述 系统集成到公司下面的门户网站&#xff0c;由于二级域名还没有申请下来只能先配置了我们的K8S域名 http://wire-qa.motortest.com/#/Data/systemNavigationK8s域名 http://wire-test.k8s-pv.motor.com/sce_web/index.html前端识别到跳转的如下地址后…

微服务介绍2

1 搭建项目 1.1 父项目的搭建 1.2 子项目的搭建 2 项目展示 1 搭建项目 1.1 父项目的搭建 步骤&#xff1a; 1 选择maven项目作为父项目&#xff0c;修改为1.8之后直接点击next 2 定义父项目的名称&#xff0c;修改Artifct Coordinates ---> GroupId 然后点击finsh就可以啦…

K8S部署后的使用:dashboard启动、使用+docker镜像拉取、容器部署

1、重置和清除旧工程&#xff1a;每个节点主机都要运行 kubeadm reset iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X 2、部署新的k8s项目&#xff1a; 只在主节点运行&#xff0c;apiserver-advertise-address填写主…

(附源码)计算机毕业设计JavaJava毕设项目美容院管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven Vue 等等组成&#xff0c;B/…

HDC 2022 开发者主题演讲与技术分论坛干货分享(附课件)

11月4日-11月6日&#xff0c;HDC 2022在东莞成功举办&#xff0c;这是一场大规模落地的思维与技术的碰撞&#xff0c;众多业内专家到场&#xff0c;共话未来。其中&#xff0c;开发者主题演讲围绕增强的声明式开发体系&#xff0c;通过一个Demo实例讲解技术创新点&#xff0c;助…

LEADTOOLS 入门教程: 使用文件观察器转换文件 - C# .NET Core

LEADTOOLS 是一个综合工具包的集合&#xff0c;用于将识别、文档、医疗、成像和多媒体技术整合到桌面、服务器、平板电脑、网络和移动解决方案中&#xff0c;是一项企业级文档自动化解决方案&#xff0c;有捕捉&#xff0c;OCR&#xff0c;OMR&#xff0c;表单识别和处理&#…

PyQt5 QTableWidget

PyQt5 QTableWidgetQTableWidget 示例1QTableWidget 示例2QTableWidget 示例3QTableWidget 示例4QTableWidget 示例5QTableWidget 示例6QTableWidget 示例1 演示QTableWidget控件的基本使用方法 import sys from PyQt5.QtWidgets import (QWidget, QTableWidget, QTableWidge…

The Seven Tools of Causal Inference with Reflections on Machine Learning 文章解读

目录 THE THREE LAYER CAUSAL HIERARCHY. 4 THE SEVEN TOOLS OF CAUSAL INFERENCE (OR WHAT YOU CAN DO WITH A CAUSAL MODEL THAT YOU COULD NOT DO WITHOUT?) 7 Tool 1: Encoding Causal Assumptions – Transparency and Testability. 10 Tool 2: Do-calculus and the …

CentOS 7:dmPython安装及测试连接达梦数据库

python下载地址&#xff1a;Python Source Releases | Python.org 查看数据库服务 dmPython 安装 cd /home/dmdba/dmdbms/drivers/python/dmPython python setup.py install [rootlocalhost dmPython]# python setup.py install running install running bdist_egg running e…

通过Python Pandas分析数据上涨下跌趋势的方法:求离散数据的差分、导数

在实际工作中&#xff0c;我们经常需要分析一组数据的历史走势/趋势情况&#xff0c;比如要从产品数据库中筛选出销量处于上升趋势的产品&#xff0c;或者从股票历史数据库中筛选出一直处于上涨的股票。 那么可以通过分析计算该组数据的差分来模拟求出该组数据走势线的导数&…

Kubernetes CKA 模拟题解析【2022最新版】(连载001)

练习准备 这是 Kubernetes CKA 认证的模拟考试&#xff0c;大家不要错过哦。 在模拟考试开始之前建议您先设置一下以下命令&#xff1a; $ alias kkubectl $ export do"--dry-runclient -o yaml" # like short for dry output. use whatever you like 设置代码补…

Lumion和Enscape渲染器有什么区别?哪个适合你

提到“傻瓜式渲染器”&#xff0c;你的脑子里最先闪过哪个软件名&#xff1f;当一溜子软件名在脑袋里飞快跳转的时候&#xff0c;有没有发现现在很多软件都被打上“傻瓜式渲染器”的标签&#xff1f;那今天咱们就先聊一聊Lumion和Enscape这两个知名软件。 01、软件介绍 Lumio…

DOTA-PEG-麦芽糖 maltose-DOTA 麦芽糖-四氮杂环十二烷四乙酸

DOTA-PEG-麦芽糖 maltose-DOTA 麦芽糖-四氮杂环十二烷四乙酸 PEG接枝修饰麦芽糖&#xff0c;麦芽糖-聚乙二醇-四氮杂环十二烷四乙酸&#xff0c;DOTA-PEG-麦芽糖 中文名称&#xff1a;麦芽糖-四氮杂环十二烷四乙酸 英文名称&#xff1a;maltose-DOTA 别称&#xff1a;DOTA修…