MyBatisPlus条件构造器和常用接口

前置配置文章

一、wapper介绍

        wrapper的继承体系:

  • Wrapper : 条件构造抽象类,最顶端父类
    • AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
      • QueryWrapper : 查询条件封装
      • UpdateWrapper : Update条件封装
    • AbstractLambdaWrapper : 使用Lambda语法
      • LambdaQueryWrapper :用于Lambda语法使用的查询Wrapper
      • LambdaUpdateWrapper : Lambda更新封装Wrapper

二、QueryWrapper

        1.常用方法

        2.关于QueryWrapper的一些测试案例

package com.qcby;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.qcby.SpringBoot.mapper.UserMapper;
import com.qcby.SpringBoot.pojo.User;
import com.qcby.SpringBoot.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.*;@SpringBootTestpublic class MybatisPlusTest {@Autowired    private UserMapper userMapper;//测试条件构造器    @Test    public void test01(){//查询用户名包含a,年龄在20到30之间,并且邮箱不为null的用户信息        //SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (username LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL)        QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.like("name", "a").between("age", 20, 30).isNotNull("email");List<User> list = userMapper.selectList(queryWrapper);list.forEach(System.out::println);}@Test    public void test02(){//按年龄降序查询用户,如果年龄相同则按id升序排列        //SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 ORDER BY age DESC,id ASC        QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.orderByDesc("age").orderByAsc("id");List<User> users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);}@Test    public void test03(){//删除email为空的用户,并非真正的删除,而是逻辑删除        //DELETE FROM t_user WHERE (email IS NULL)        QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.isNull("email");//条件构造器也可以构建删除语句的条件        int result = userMapper.delete(queryWrapper);System.out.println("受影响的行数:" + result);}@Test    public void test04() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();//将(年龄大于20并且用户名中包含有a)或邮箱为null的用户信息修改        //UPDATE t_user SET age=?, email=? WHERE (username LIKE ? AND age > ? OR email IS NULL)        queryWrapper                .like("name", "a").gt("age", 20).or().isNull("email");User user = new User();user.setAge(18);user.setEmail("user@atguigu.com");int result = userMapper.update(user, queryWrapper);System.out.println("受影响的行数:" + result);}@Test    public void test05() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();//将用户名中包含有a并且(年龄大于20或邮箱为null)的用户信息修改        //UPDATE t_user SET age=?, email=? WHERE (username LIKE ? AND (age > ? OR email IS NULL))        //lambda表达式内的逻辑优先运算        //lambda中的i仍然表示该wrapper对象        queryWrapper.like("name", "a").and(i -> i.gt("age", 20).or().isNull("email"));User user = new User();user.setAge(18);user.setEmail("user@atguigu.com");int result = userMapper.update(user, queryWrapper);System.out.println("受影响的行数:" + result);}@Testpublic void test06() {//查询用户信息的username和age字段    //SELECT username,age FROM t_user    QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.select("name", "age");//selectMaps()返回Map集合列表,通常配合select()使用,避免User对象中没有被查询到的列值 为null    List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper); maps.forEach(System.out::println);}@Testpublic void test07() {//查询id小于等于3的用户信息    //SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE (id IN (select id from t_user where id <= 3))    QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.inSql("id", "select id from t_user where id <= 3");List<User> list = userMapper.selectList(queryWrapper);list.forEach(System.out::println);}
}

        3.UpdateWrapper

@Testpublic 
void test08() {//将(年龄大于20或邮箱为null)并且用户名中包含有a的用户信息修改    //组装set子句以及修改条件    UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();//lambda表达式内的逻辑优先运算    updateWrapper            .set("age", 18).set("email", "user@atguigu.com").like("name", "a").and(i -> i.gt("age", 20).or().isNull("email"));//这里必须要创建User对象,否则无法应用自动填充。如果没有自动填充,可以设置为null    //UPDATE t_user SET username=?, age=?,email=? WHERE (username LIKE ? AND (age > ? OR email IS NULL))    //User user = new User();    //user.setName("张三");    //int result = userMapper.update(user, updateWrapper);    //UPDATE t_user SET age=?,email=? WHERE (username LIKE ? AND (age > ? OR email IS NULL))    int result = userMapper.update(null, updateWrapper);System.out.println(result);
}

        4.condition

        条件判断的两种格式:

@Test
public void test09() {//定义查询条件,有可能为null(用户未输入或未选择)    String username = null;Integer ageBegin = 10;Integer ageEnd = 24;QueryWrapper<User> queryWrapper = new QueryWrapper<>();//StringUtils.isNotBlank()判断某字符串是否不为空且长度不为0且不由空白符(whitespace) 构成    if(StringUtils.isNotBlank(username)){queryWrapper.like("name","a");}if(ageBegin != null){queryWrapper.ge("age", ageBegin);}if(ageEnd != null){queryWrapper.le("age", ageEnd);}//SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE (age >= ? AND age <= ?)    List<User> users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);
}
@Test
public void test08UseCondition() {//定义查询条件,有可能为null(用户未输入或未选择)    String username = null;Integer ageBegin = 10;Integer ageEnd = 24;QueryWrapper<User> queryWrapper = new QueryWrapper<>();//StringUtils.isNotBlank()判断某字符串是否不为空且长度不为0且不由空白符(whitespace) 构成    queryWrapper            .like(StringUtils.isNotBlank(username), "name", "a").ge(ageBegin != null, "age", ageBegin).le(ageEnd != null, "age", ageEnd);//SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE (age >= ? AND age <= ?)    List<User> users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);
}

        5.LambdaQueryWrapper和LambdaUpdateWrapper

@Testpublic 
void test11() {//组装set子句    LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();updateWrapper            .set(User::getAge, 18).set(User::getEmail, "user@atguigu.com").like(User::getName, "a").and(i -> i.lt(User::getAge, 24).or().isNull(User::getEmail)); //lambda 表达式内的逻辑优先运算    User user = new User();int result = userMapper.update(user, updateWrapper);System.out.println("受影响的行数:" + result);
}

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

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

相关文章

【Java万花筒】表单验证与数据校验库:拓展你的Java应用

表单验证与数据校验库&#xff1a;为你的Java应用增添安全护盾 前言 在开发Java应用的过程中&#xff0c;表单验证和数据校验是非常重要的一部分。确保用户输入的数据符合预期的规则和格式&#xff0c;可以增加系统的稳定性和安全性。为了简化表单验证和数据校验的过程&#…

【Pytorch深度学习开发实践学习】B站刘二大人课程笔记整理lecture06 Logistic回归

【Pytorch深度学习开发实践学习】B站刘二大人课程笔记整理lecture06 Logistic回归 课程网址 Pytorch深度学习实践 部分课件内容&#xff1a; import torchx_data torch.tensor([[1.0],[2.0],[3.0]]) y_data torch.tensor([[0.0],[0.0],[1.0]])class LogisticRegressionModel(…

2.22 Qt day3 多界面跳转+qss登录界面优化+发布软件+对话框

思维导图&#xff1a; 完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号…

Linux系统运维:离线安装sar-性能监视和分析工具

目 录 一、前言 二、系统环境 三、安装sar &#xff08;一&#xff09;准备工作 1、下载 sar 工具的安装包&#xff1a; 2、将安装包传输到 CentOS 服务器 &#xff08;二&#xff09;安装工作 1、解压 2、配置安装 3、编译 4、安装 &#xff08;三&#xff0…

产品渲染3D效果图一张多少钱,哪个平台更有性价比?

产品渲染3D效果图的价格受到多方面因素的影响&#xff0c;包括但不限于产品类型、渲染难度以及输出尺寸等。如果效果图需要后期处理&#xff0c;还有可能增加其他费用。接下来&#xff0c;我们来了解一下产品渲染效果图的费用情况。 1.产品渲染3D效果图一张多少钱&#xff1f; …

邮件群发助力展会行业邀请函

在数字化时代&#xff0c;邮件群发邀请函成为展会行业获取参展商和观众的一项强有力的工具。通过巧妙的邮件营销策略&#xff0c;展会主办方能够在竞争激烈的市场中脱颖而出&#xff0c;吸引更多目标受众。U-Mail邮件群发将深入探讨邮件在展会行业的优势&#xff0c;并分享一些…

TDesign Vue Next Starter中后台项目的生产环境部署与CSP内容安全策略、CORS跨源资源共享和服务后端开发

TDesign Vue Next Starter中后台项目的生产环境部署与CSP内容安全策略、CORS跨源资源共享和服务后端开发 目录 TDesign Vue Next Starter中后台项目的生产环境部署与CSP内容安全策略、CORS跨源资源共享和服务后端开发 一、TDesign Vue Next Starter中后台项目模板 1.1、项目…

[es6] symbol 是个啥东西,具体有什么用,有哪些应用场景,js内置的对于symbol 的应用有哪些

首先请看官网&#xff0c;然后明确下面几个基本知识点 Symbol 是 es6 提出&#xff0c;是基本数据类型typeof SymbolInstance symbol不支持 new 语法每个 Symbol() 返回的值都是唯一的可以作为对象的属性&#xff0c;且是唯一的属性有内置通用 symbol&#xff0c;可以使用属性…

ChatGPT在数据处理中的应用

ChatGPT在数据处理中的应用 今天的这篇文章&#xff0c;让我不断体会AI的强大&#xff0c;愿人类社会在AI的助力下走向更加灿烂辉煌的明天。 扫描下面二维码注册 ​ 数据处理是贯穿整个数据分析过程的关键步骤&#xff0c;主要是对数据进行各种操作&#xff0c;以达到最终的…

SpringBoot与MyBatisPlus整合常见‘XXXXMapper‘ that could not be found问题处理方式

SpringBoot与MyBatisPlus整合常见’XXXXMapper’ that could not be found问题处理方式 文章目录 1. 错误信息提示2. 问题排查与处理1. 检查application.yml配置是否正确1.Mybtis配置2. MyBatis-Plus配置 2. 检查主启动类标上注解是否正确3. 检测XXXMaper接口上的注解是否正确4…

算法| 977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵II

977.有序数组的平方 简单题 /*** param {number[]} nums* return {number[]}*/ var sortedSquares function(nums) {const arr []for(let i 0; i < nums.length;i){arr[i] nums[i]*nums[i]}return arr.sort((a,b)> a-b) };209.长度最小的子数组 考察&#xff1a; 不…

Linux第62步_备份移植好的所有的文件和文件夹

1、备份“my-tfa”目录下所有的文件和文件夹 1)、打开终端 输入“ls回车”&#xff0c;列出当前目录下所有的文件和文件夹 输入“cd linux回车”&#xff0c;切换“linux”目录下 输入“ls回车”&#xff0c;列出当前目录下所有的文件和文件夹 输入“cd atk-mp1/回车”&am…

阿里云 短信服务——验证码盗刷与短信轰炸

阿里云 短信服务——验证码盗刷与短信轰炸 前言验证码盗刷与短信轰炸如果博主的文章对您有所帮助&#xff0c;可以评论、点赞、收藏&#xff0c;支持一下博主!!! 前言 最近在项目上使用到了阿里云的短信服务在忘记密码业务中发送短信验证码。 出于对于日后的业务安全的考虑需要…

Singularity 镜像管理工具的学习路线推荐,及学习建议

Singularity是一种流行的容器平台&#xff0c;专为科学计算和数据密集型工作负载设计。它允许用户在不同的计算环境中以一致、可重复的方式打包他们的应用程序及其依赖项。以下是一个推荐的学习路线&#xff0c;以及一些详细的学习建议&#xff0c;帮助你掌握Singularity。 初…

Linux下Apose由Word转PDF后乱码问题解决

Linux下Apose由Word转PDF后乱码问题解决 文章目录 Linux下Apose由Word转PDF后乱码问题解决1. 问题描述2. 问题原因3. 解决方法1. 拷贝Windows中的字体库2. 在Linux中安装字体库 4. 常见问题1. Ubuntu环境下使用如下命令安装&#xff1a;2. Centos环境下使用如下命令安装 1. 问题…

介绍一下浏览器的缓存(Expires, Cache-Control等)

浏览器的缓存是一种机制&#xff0c;用于存储网页和资源的副本&#xff0c;以便在之后的请求中能够更快地获取这些资源&#xff0c;而不是每次都从服务器重新下载。这不仅可以提高网页的加载速度&#xff0c;还可以减少服务器的负载和带宽的使用。 在HTTP协议中&#xff0c;有…

272.【华为OD机试真题】文件缓存系统(JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-文件缓存系统二.解题思路三.题解代码Python题解…

PCIe P2P DMA全景解读

温馨提醒&#xff1a;本文主要分为5个部分&#xff0c;总计4842字&#xff0c;需要时间较长&#xff0c;建议先收藏&#xff01; P2P DMA简介 P2P DMA软硬件支持 CXL P2P DMA原理差异 P2P DMA应用场景 P2P DMA技术挑战 一、P2P DMA简介 P2P DMA&#xff08;Peer-to-Peer…

发现了一个超赞的办公利器!ONLYOFFICE 文档 8.0 强势登场!

迎接 ONLYOFFICE 文档 v8.0发布后的全新升级&#xff01;现在&#xff0c;适用于 Linux、Windows 和 macOS 的免费 ONLYOFFICE 桌面应用程序更加强大&#xff01;全新的 RTL 界面、本地界面主题、与 Moodle 的集成等实用功能&#xff0c;让你的办公体验更加出色&#xff01;全新…

挑战30天学完Python:Day19 文件处理

&#x1f4d8; Day 19 &#x1f389; 本系列为Python基础学习&#xff0c;原稿来源于 30-Days-Of-Python 英文项目&#xff0c;大奇主要是对其本地化翻译、逐条验证和补充&#xff0c;想通过30天完成正儿八经的系统化实践。此系列适合零基础同学&#xff0c;或仅了解Python一点…