MyBatisPlus之条件查询(常规查询、范围查询、模糊查询、null值处理等)

2023-11-16

MyBatisPlus之条件查询

1、设置查询条件

1.1 常规格式

  @Test
    public void testInuire() {
        QueryWrapper<User> qw = new QueryWrapper<User>();
         //查询年龄大于等于15岁,小于30岁的用户
        qw.lt("age", 30);
        qw.ge("age", 15);
        List<User> userList = userDao.selectList(qw);
        System.out.println(userList);
    }

1.2 链式编程格式

  @Test
    public void testInuire() {
        QueryWrapper<User> qw = new QueryWrapper<User>();
         //查询年龄大于等于15岁,小于30岁的用户
        qw.lt("age", 30).ge("age", 15);
        List<User> userList = userDao.selectList(qw);
        System.out.println(userList);
    }

1.3 lambda格式1

 @Test
    public void testLambda1() {
        QueryWrapper<User> qw = new QueryWrapper<User>();
         //查询年龄大于等于15岁,小于30岁的用户
        qw.lambda().lt(User::getAge, 30).ge(User::getAge,15);
        List<User> userList = userDao.selectList(qw);
        System.out.println(userList);
    }

1.4 lambda格式2

 @Test
    public void testLambda2() {
        LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
        //查询年龄大于等于15岁,小于30岁的用户
        lqw.lt(User::getAge, 30).ge(User::getAge,15);
        List<User> userList = userDao.selectList(lqw);
        System.out.println(userList);
    }

2、组合查询条件

2.1 并且

 @Test
    public void testLambda2() {
        LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
        //查询年龄大于等于18岁,小于30岁的用户
        lqw.lt(User::getAge, 30).gt(User::getAge,18);
        List<User> userList = userDao.selectList(lqw);
        System.out.println(userList);
    }

2.2 或者

 //多条件查询
    @Test
    public void testLambda3() {
        //小于18岁或者大于30岁
        LambdaQueryWrapper<User> lqw2 = new LambdaQueryWrapper<User>();
        lqw2.lt(User::getAge, 18).or().gt(User::getAge, 30);
        List<User> userList2 = userDao.selectList(lqw2);
        System.out.println(userList2);
    }

3、条件查询null值判定

3.1 封装User模型的查询条件

观察User类里哪些适合设置上下限

package com.example.maybatisplus_01_quickstart.domain.query;

import com.example.maybatisplus_01_quickstart.domain.User;
import lombok.Data;

@Data
public class UserQuery extends User {
    private Integer age2;
}

3.2 测试类

package com.example.maybatisplus_01_quickstart;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.example.maybatisplus_01_quickstart.dao.UserDao;
import com.example.maybatisplus_01_quickstart.domain.User;
import com.example.maybatisplus_01_quickstart.domain.query.UserQuery;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class InquireNotNullTest {
    @Autowired
    private UserDao userDao;

    @Test
    public void inqueryNotNull() {
        //模拟页面传递过来的查询数据
        UserQuery uq = new UserQuery();
        uq.setAge(15);
        uq.setAge2(30);

        LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
        lqw.lt(null != uq.getAge2(), User::getAge, uq.getAge2());
        lqw.gt(null != uq.getAge(), User::getAge, uq.getAge());
        List<User> userList = userDao.selectList(lqw);
        System.out.println(userList);
    }
}

3.3 null值处理

3.3.1 条件参数控制

LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
lqw.lt(null != uq.getAge2(), User::getAge, uq.getAge2());
lqw.gt(null != uq.getAge(), User::getAge, uq.getAge());
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);

3.3.2 条件参数控制(链式编程)

LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
lqw.lt(null != uq.getAge2(), User::getAge, uq.getAge2())
    .gt(null != uq.getAge(), User::getAge, uq.getAge());
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);

4、查询投影

4.1 查询结果中包含模型类中 部分属性

 @Test
    public void testQueryProjection1() {
        LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
        //这种方式只适合lambda表达式
        lqw.select(User::getId, User::getName, User::getAge);
        List<User> userList = userDao.selectList(lqw);
        System.out.println(userList);
}

4.2 查询结果包含模型类中 未定义的属性

 @Test
    public void testQueryProjection3() {
        QueryWrapper<User> lqw = new QueryWrapper<User>();
        lqw.select("count(*) as count, tel");
        lqw.groupBy("tel");
        List<Map<String, Object>> userList = userDao.selectMaps(lqw);
        System.out.println(userList);
 }

4.3 原生mysql查询

如果上述方法都无法实现,只能自己手写mysql代码。

4.4 完整测试样例

package com.example.maybatisplus_01_quickstart;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.maybatisplus_01_quickstart.dao.UserDao;
import com.example.maybatisplus_01_quickstart.domain.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;
import java.util.Map;

@SpringBootTest
public class QueryProjectionTest {
    @Autowired
    private UserDao userDao;

    //查询投影
    @Test
    public void testQueryProjection1() {
        LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
        lqw.select(User::getId, User::getName, User::getAge);
        List<User> userList = userDao.selectList(lqw);
        System.out.println(userList);
    }

    @Test
    public void testQueryProjection2() {
        QueryWrapper<User> lqw = new QueryWrapper<User>();
        lqw.select("id","name","age");
        List<User> userList = userDao.selectList(lqw);
        System.out.println(userList);
    }

    @Test
    public void testQueryProjection3() {
        QueryWrapper<User> lqw = new QueryWrapper<User>();
        lqw.select("count(*) as count, tel");
        lqw.groupBy("tel");
        List<Map<String, Object>> userList = userDao.selectMaps(lqw);
        System.out.println(userList);
    }

}

5、查询条件设置(范围匹配、模糊匹配等)

示例

package com.example.maybatisplus_01_quickstart;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.example.maybatisplus_01_quickstart.dao.UserDao;
import com.example.maybatisplus_01_quickstart.domain.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class ConditionalQueryMoreTest {
    @Autowired
    private UserDao userDao;

    //模拟登录操作查询
    @Test
    public void testConditionalQueryMore() {
        //条件查询
        LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
        //模拟登录操作
        lqw.eq(User::getName, "西瓜").eq(User::getPassword, "ewfvfv");
        User loginUser = userDao.selectOne(lqw);
        System.out.println(loginUser);
    }

    //范围查询
    @Test
    public void testfindRangeQuery() {
        LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
        //范围查询 lt(不带等号) le(带等号) gt(不带等号) le(带等号) eq between
        //between中前小后大
        lqw.between(User::getAge,10,22);
        List<User> userList = userDao.selectList(lqw);
        System.out.println(userList);
    }

    //模糊查询
    @Test
    public void testfuzzyQuery() {
        LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
        //模糊匹配
        //likeRight表示搜索是 西%
        //likeLeft表示搜索是 %西
        lqw.likeRight(User::getName,"西");
        List<User> userList = userDao.selectList(lqw);
        System.out.println(userList);
    }

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MyBatisPlus之条件查询(常规查询、范围查询、模糊查询、null值处理等) 的相关文章

  • 如何将本机库链接到 IntelliJ 中的 jar?

    我正在尝试在 IntelliJ 中设置 OpenCV 但是我一直在弄清楚如何告诉 IntelliJ 在哪里可以找到本机库位置 在 Eclipse 中 添加 jar 后 您可以在 Build Config 屏幕中设置 Native 库的位置
  • 如何让 BlazeDS 忽略属性?

    我有一个 java 类 它有一个带有 getter 和 setter 的字段 以及第二对 getter 和 setter 它们以另一种方式访问 该字段 public class NullAbleId private static final
  • 不同帐户上的 Spring Boot、JmsListener 和 SQS 队列

    我正在尝试开发一个 Spring Boot 1 5 应用程序 该应用程序需要侦听来自两个不同 AWS 帐户的 SQS 队列 是否可以使用 JmsListener 注解创建监听器 我已检查权限是否正确 我可以使用 getQueueUrl 获取
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • 如何在java中将一个数组列表替换为另一个不同大小的数组列表

    我有两个大小不同的数组列表 如何从此替换 ArrayList
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • java.lang.IllegalStateException:应用程序 PagerAdapter 更改了适配器的内容,而没有调用 PagerAdapter#notifyDataSetChanged android

    我正在尝试使用静态类将值传递给视图 而不是使用意图 因为我必须传递大量数据 有时我会收到此错误 但无法找出主要原因是什么 Error java lang IllegalStateException The application s Pag
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • java.lang.IllegalStateException:提交响应后无法调用 sendRedirect()

    这两天我一直在尝试找出问题所在 我在这里读到我应该在代码中添加一个返回 我做到了 但我仍然得到 java lang IllegalStateException Cannot call sendRedirect after the respo
  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • 如何通过JAVA代码实现多线程分段下载+断点续传

    多线程下载技术是很常见的一种下载方案 这种方式充分利用了多线程的优势 在同一时间段内通过多个线程发起下载请求 将需要下载的数据分割成多个部分 每一个线程只负责下载其中一个部分 然后将下载后的数据组装成完整的数据文件 这样便大大加快了下载效率
  • matplotlib.pyplot.plot()参数详解

    https matplotlib org api pyplot summary html 在交互环境中查看帮助文档 import matplotlib pyplot as plt help plt plot 以下是对帮助文档重要部分的翻译
  • CloudCompare——计算点云的法向量

    目录 1 Computing normals on a cloud 2 点云法线计算结果 3 反转法线方向 Normals gt Invert 4 With Minimum Spanning Tree 5 With Fast Marchin
  • AutoCAD 二次开发之 ObjectARX 环境搭建

    AutoCAD2017 VS2015 Win7 Win10 第一步 安装ObjectARX SDK 库 解压 ObjectARX SDK 文件到指定路径 C ObjectARX 避免出错 使用默认路径 第二步 安装向导程序 创建注册表 新建
  • 使用JestClient连接elasticsearch-5.x对数据进行分组聚合

    原本数据存放在mysql中 项目需求是从mysql中查出来计算推送给前端 但是随着数据量增大 我们的查询语句也复杂 性能会明显下降 所以就考虑干脆存放到elasticsearch中 查询计算都方便 于是去和公司专门负责es平台服务的人对接
  • IT项目管理大作业-个人报告

    在本次IT项目管理大作业中我主要负责了寻找对应模块和工具的工作 主要职责就是负责百度搜索 为开发人员和测试人员提供支持 虽然在本次大作业的实际执行中 由于我实习白天确实很忙外加团队开发人员都有很强的开发能力 因此基本上开发人员和测试人员还是
  • JAVA和C++区别都有哪些?

    转载自品略图书馆 http www pinlue com article 2020 05 1022 4710469487040 html 这是Java与C 区别的一个比较完整的答案 大家可以学习一下 JAVA和C 都是面向对象语言 也就是说
  • shiro使用自定义realm实现数据认证

    自定义realm实现数据认证 在开发中 有时会与一些nosql或者其他地方保存的数据进行认证 这时候 shiro定义的那些realm类可能不能满足实际的功能需求 这时候我们可以通过自定义一个realm来沟通这些数据 实现认证和权限控制 首先
  • Python数据挖掘进阶--泰坦尼克号案例分析

    一 概念介绍 1 机器学习 机器学习算法来建立模型 当有新的数据过来 通过模型能够进行预测 2 特征 features 和标签 labels 特征 数据的属性 通过这些特征可以代表数据的特点 例如Excel的字段列名 也叫做解释变量或自变量
  • Java基础-File

    File 1 file和IO的概述 2 Flie的构造方法 3 File 绝对路径和相对路径 4 File创建功能 5 File 判断和获取功能 6 File listFile 7 案例 File的练习 上一篇Java基础 Stream流
  • 算法分析与设计二分搜索问题Python

    需求分析 设a 0 n 1 是已排好序的数组 试改写二分搜索算法 使得当搜索元素x不在数组a中时 返回小于x的最大元素的位置i和大于x的最小元素的位置j 当搜索元素x在数组a中时 返回x在数组中的位置 此时i和j相同 代码如下 def bi
  • 如何将分布式锁性能提升100倍【含面试题】

    面试题分享 云数据解决事务回滚问题 点我直达 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java python面试题 项目实战 AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转clo
  • List接口不是很详细的介绍

    文章目录 前言 一 List是什么 1 1 List概述 1 2 常用API 带有Index 都是List新增方法 1 3 List用法 二 常见实用类 2 1 ArrayList与Vector 2 2 ArrayList与LinkedLi
  • 微信小程序之behaviors

    目录 简介 使用方法 意义 简介 微信小程序的behaviors是一种可复用的代码块 可以在多个组件中共享 它类似于面向对象编程中的 继承 可以将一些通用的逻辑和方法封装在behaviors中 然后在需要使用的组件中引用该behaviors
  • SQL注入原理-报错盲注

    小伙伴们大家好 本期为大家带来的内容是SQL注入原理之报错盲注 目录 为什么要使用报错盲注 常见的报错函数 updatexml 函数 extractvalue 函数 实战演示 1 检测是否存在注入点 2 执行报错语句爆出数据 1 爆出当前数
  • Docker安装+基本操作+配置阿里云镜像仓库,以及Docker下mysql,tomcat,redis安装 包括redis.conf文件

    1 帮助启动类命令 2 镜像命令 3 容器命令 4 配置阿里云镜像仓库 1 登陆阿里云镜像仓库 2 往阿里云镜像仓库推送本地镜像 有教程 最后只用改一个版本号即可 版本最好不要重复 3 从阿里云镜像仓库拉取镜像 同上 非常简单 5 dock
  • 回调函数的作用

    回调函数的作用 原文地址 http wmnmtm blog 163 com blog static 3824571420105484116877 一直不太理解回调函数的作用 下面是找到的一些关于回调函数的作用的解答 1 回调函数是一个很有用
  • java正则表达式验证密码_java密码验证正则表达式校验

    正则表达式就是记录文本规则的代码 php密码验证正则表达式 8位长度限制 密码验证 password zongzi Abc oo13a2 n preg match all a zA Z d 8 password array 长度是8或更多
  • Spring中事件监听器

    Spring中事件监听器 概述 基本构成 Spring事件监听器应用 Spring中监听器流程和源码解析 概述 事件监听器是观察者模式的一个应用 当被观察的事件发生改变时需要通知该事件的订阅者针对这个事件做出对应行为 它将事件的发布和订阅进
  • MyBatisPlus之条件查询(常规查询、范围查询、模糊查询、null值处理等)

    MyBatisPlus之条件查询 MyBatisPlus之条件查询 1 设置查询条件 1 1 常规格式 1 2 链式编程格式 1 3 lambda格式1 1 4 lambda格式2 2 组合查询条件 2 1 并且 2 2 或者 3 条件查询