QueryWrapper,LambdaQueryWrapper用法简介(MyBatis Plus进阶)

news2024/12/25 22:51:03

目录

  • 一、项目结构及数据库内容如图
  • 二、数据库内容
  • 三、代码示例

关于如何使用MyBatis Plus自动生成service,mapper,domain参考我的这篇博客👉使用MyBatis Plus自动生成service,mapper,domain

一、项目结构及数据库内容如图

在这里插入图片描述
service,mapper,domain均为MyBatis Plus自动生成。

二、数据库内容

create table mp.tb_user
(
    id        bigint auto_increment comment '主键ID'
        primary key,
    user_name varchar(20) not null comment '用户名',
    password  varchar(20) not null comment '密码',
    name      varchar(30) null comment '姓名',
    age       int         null comment '年龄',
    email     varchar(50) null comment '邮箱',
    dept_id   int         null,
    salary    double      null
)
    charset = utf8;
INSERT INTO mp.tb_user (id, user_name, password, name, age, email, dept_id, salary) VALUES (1, 'zhangsan', '123456', '张三', 18, 'test1@itcast.cn', 222, 2000);
INSERT INTO mp.tb_user (id, user_name, password, name, age, email, dept_id, salary) VALUES (2, 'lisi', '123456', '李四', 20, 'test2@itcast.cn', 333, 3000);
INSERT INTO mp.tb_user (id, user_name, password, name, age, email, dept_id, salary) VALUES (3, 'wangwu', '123456', '王五', 28, 'test3@itcast.cn', 222, 4000);
INSERT INTO mp.tb_user (id, user_name, password, name, age, email, dept_id, salary) VALUES (4, 'zhaoliu', '123456', '赵六', 21, 'test4@itcast.cn', 333, 5000);
INSERT INTO mp.tb_user (id, user_name, password, name, age, email, dept_id, salary) VALUES (5, 'sunqi', '123456', '孙七', 24, 'test5@itcast.cn', 222, 2000);
INSERT INTO mp.tb_user (id, user_name, password, name, age, email, dept_id, salary) VALUES (6, 'sajkdl', '123456', 'sajkdl', 18, 'test1@itcast.cn', 222, 4000);
INSERT INTO mp.tb_user (id, user_name, password, name, age, email, dept_id, salary) VALUES (7, 'dkfldk', '123456', 'dkfldk', 20, 'test2@itcast.cn', 333, 3000);
INSERT INTO mp.tb_user (id, user_name, password, name, age, email, dept_id, salary) VALUES (8, 'rpewp', '123456', 'rpewp', 28, 'test3@itcast.cn', 222, 2000);
INSERT INTO mp.tb_user (id, user_name, password, name, age, email, dept_id, salary) VALUES (9, 'ksjd', '123456', 'ksjd', 21, 'test4@itcast.cn', 333, 2000);
INSERT INTO mp.tb_user (id, user_name, password, name, age, email, dept_id, salary) VALUES (10, 'kzzlk', '123456', 'kzzlk', 24, 'test5@itcast.cn', 222, 3000);
INSERT INTO mp.tb_user (id, user_name, password, name, age, email, dept_id, salary) VALUES (11, 'weiro', '123456', 'weiro', null, 'test5@itcast.cn', 222, 5000);

三、代码示例

下面是@Test注解的示例

package com.example.itcastmybatisplus;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.itcastmybatisplus.domain.TbUser;
import com.example.itcastmybatisplus.domain.query.UserQuery;
import com.example.itcastmybatisplus.mapper.TbUserMapper;
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
class ItcastMybatisPlusApplicationTests {

    @Test
    void contextLoads() {
    }
    @Autowired private TbUserMapper userMapper;

//    测试函数
    @Test public void A(){
        List<TbUser> tbUsers = userMapper.selectList(null);
        System.out.println(tbUsers);
    }
//    条件查询 查找所有年龄<22岁的user
    @Test public void B(){
        QueryWrapper<TbUser> queryWrapper = new QueryWrapper<>();
        queryWrapper.lt("age",22);
        List<TbUser> tbUsers = userMapper.selectList(queryWrapper);
        System.out.println(tbUsers);
    }
    //QueryWrapper的基础上使用lambda
    @Test public void C(){
        QueryWrapper<TbUser> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().lt(TbUser::getAge,22);
        List<TbUser> tbUsers = userMapper.selectList(queryWrapper);
        System.out.println(tbUsers);
    }
//    查询年龄小于22岁的user
    @Test public void D(){
        LambdaQueryWrapper<TbUser> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.lt(TbUser::getAge,22);
        List<TbUser> tbUsers = userMapper.selectList(queryWrapper);
        System.out.println(tbUsers);
    }
    //条件查询,查询年龄在19岁以上,25岁一下的user
    @Test public void E(){
        LambdaQueryWrapper<TbUser> wrapper = new LambdaQueryWrapper<>();
        wrapper.lt(TbUser::getAge,25);
        wrapper.gt(TbUser::getAge,19);
        List<TbUser> tbUsers = userMapper.selectList(wrapper);
        System.out.println(tbUsers);
    }
//    查询年龄小于20 '或者' 大于25岁的user
    @Test public void F(){
        LambdaQueryWrapper<TbUser> wrapper = new LambdaQueryWrapper<>();
        wrapper.gt(TbUser::getAge,25).or().lt(TbUser::getAge,20);
        System.out.println(userMapper.selectList(wrapper));
    }
    //比较的字段始终只有一个age,因此如果不注释uq.setAge(20);和uq.setAge(25);的话,就是选出age在20和25之间的
    //如果注释uq.setAge(20);就是选出age<25的
    //如果注释uq.setAge2(25);就是选出age>20的
    @Test public void G(){
        UserQuery uq = new UserQuery();
        uq.setAge(20);
//        uq.setAge2(25);
        LambdaQueryWrapper<TbUser> wrapper = new LambdaQueryWrapper<>();
        wrapper.lt(uq.getAge2()!=null,TbUser::getAge,uq.getAge2());
        wrapper.gt(uq.getAge()!=null,TbUser::getAge,uq.getAge());
        System.out.println(userMapper.selectList(wrapper));
    }
//    查询投影,选择特定的字段输出,没选择的字段输出为NULL
    @Test public void H(){
        LambdaQueryWrapper<TbUser> wrapper = new LambdaQueryWrapper<>();
        wrapper.select(TbUser::getId,TbUser::getUserName);
        System.out.println(userMapper.selectList(wrapper));
    }
//    聚合函数查询
    @Test public void I(){
        //不能使用LambdaQueryWrapper
        QueryWrapper<TbUser> wrapper = new QueryWrapper<>();
        wrapper.select("count(*) as cnt , max(age) as max_age");
//        wrapper.select("max(age) as max_age");
        System.out.println(userMapper.selectMaps(wrapper));
    }
    @Test public void J(){
        QueryWrapper<TbUser> wrapper = new QueryWrapper<>();
//        wrapper.select("count(*) as cnt , max(age) as max_age");
//        wrapper.lambda().groupBy(TbUser::getDeptId);
        wrapper.select("count(*) as count,email");
        wrapper.groupBy("email");
        System.out.println(userMapper.selectMaps(wrapper));
    }
//    登录查询,等值查询
    @Test public void K(){
        LambdaQueryWrapper<TbUser> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(TbUser::getUserName,"zhangsan").eq(TbUser::getPassword,"123456");
        TbUser tbUser = userMapper.selectOne(wrapper);
        System.out.println(tbUser);
    }
//    范围查询,对年龄进行范围查询,使用lt()、le()、gt()、ge()、between()进行范围查询
//    gt():大于(>)
//    ge():大于等于(>=)
//    lt():小于(<)
//    lte():小于等于(<=)
//    between():between ? and ?
    @Test public void L(){
        LambdaQueryWrapper<TbUser> wrapper = new LambdaQueryWrapper<>();
        wrapper.between(TbUser::getAge,20,25);
        System.out.println(userMapper.selectList(wrapper));
    }
//    :查询表中name属性的值以J开头的用户信息,使用like进行模糊查询
//    like():前后加百分号,如 %J%
//    likeLeft():前面加百分号,如 %J
//    likeRight():后面加百分号,如 J%
    @Test public void M(){
        LambdaQueryWrapper<TbUser> wrapper = new LambdaQueryWrapper<>();
        wrapper.likeRight(TbUser::getName,"s");
        System.out.println(userMapper.selectList(wrapper));
        System.out.println("--------------------------------------------------");
        wrapper = new LambdaQueryWrapper<>();
        wrapper.like(TbUser::getName,"s");
        System.out.println(userMapper.selectList(wrapper));
    }

    @Test public void N(){
//        orderBy排序
//        condition:条件,true则添加排序,false则不添加排序
//        isAsc:是否为升序,true升序,false降序
//        columns:排序字段,可以有多个
        LambdaQueryWrapper<TbUser> wrapper = new LambdaQueryWrapper<>();
        wrapper.orderByAsc(TbUser::getSalary);
        System.out.println(userMapper.selectList(wrapper));
        System.out.println("--------------------------------------------------");
        /**
         * orderByAsc/Desc(单个column):按照指定字段进行升序/降序
         * orderByAsc/Desc(多个column):按照多个字段进行升序/降序
         * orderByAsc/Desc
         * condition:条件,true添加排序,false不添加排序
         * 多个columns:按照多个字段进行排序
         */
        wrapper = new LambdaQueryWrapper<>();
        wrapper.orderBy(true,false,TbUser::getSalary);
        System.out.println(userMapper.selectList(wrapper));
    }
}

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

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

相关文章

使用Docker构建LNMP环境并运行Wordpress网站平台

使用Docker构建LNMP环境并运行Wordpress网站平台 1.基于Dockerfile构建LNMP镜像1.1 基于Dockerfile构建nginx镜像1.1.1 修改/usr/local/nginx/conf/nginx.conf文件1.1.2 再次修改nginx服务的Dockerfile文件&#xff08;多级构建&#xff09;1.1.3 创建安装环境依赖包的镜像 1.2…

系统设计《System Design Interview》读书笔记

设计性能认知 延时 操作名称时间1级缓存引用0.5ns2级缓存引用7ns互斥锁/解锁100ns主存引用100ns用zippy压缩1k字节10,000ns10μs通过1GB网络传输2KB字节20,000ns 20μs内存按照顺序读取1MB250,000ns250μs同一个数据中心内的往返500,000ns 500μs磁盘寻找10,000.000ns10ms从…

Qt - .ui 文件的使用

文章目录 目录工具栏Dock Widget代码控制 ui添加资源添加文件 目录 子目录只能输入英文&#xff0c;想要显示中文&#xff0c;可以修改右下方表中的 text 属性&#xff1a; 工具栏 让工具栏共用 菜单栏的 new 和 open&#xff0c;只需将下方列表的控件&#xff0c;拖拽到工具栏…

解决@Scope(“prototype“)不生效的问题

目录 Scope(“prototype“)不生效Scope(“prototype“)正确用法——解决Bean多例问题 1.问题&#xff0c;Spring管理的某个Bean需要使用多例2.问题升级3. Spring给出的解决问题的办法&#xff08;解决Bean链中某个Bean需要多例的问题&#xff09; Scope(“prototype“)不生效 …

STM32(HAL库)驱动st7789LCD屏幕(7引脚240*240)

目录 1、简介 2、CubeMX初始化配置 2.1 基础配置 2.1.1 SYS配置 2.1.2 RCC配置 2.2 屏幕引脚配置 2.3 项目生成 3、KEIL端程序整合 3.1 LCD驱动添加 3.2 函数修改 3.2.1 lcd.h修改 3.2.2 lcd_innit.h 修改 3.2.3 lcd.c修改 3.2.4 lcd_inut.c修改 3.3 主函数代码 3.3…

VsCode上传到gitee码云仓库详细教程

首先下载git&#xff0c;地址:https://git-scm.com/downloads 1、到你要提交项目的gitee的项目中&#xff0c;右键点击Git Bash Here进入&#xff0c;进入后按顺序输入&#xff1a; 2、第二步输入你的gitee码云账户 输入ssh-keygen -t ed25519 -C "xxxxxxxxxxxxxxxxx&qu…

docker部署应用的三种方式——最后一种直接使用shell脚本一键化部署

docker命令部署 拉取ubuntu的基础镜像 docker pull ubuntu注意基础镜像是压缩版的&#xff0c;只保证能够运行项目的最基础条件&#xff0c;很多命令都是没有的&#xff0c;在使用过程中如果需要那些命令需要提前安装。 安装openjdk sudo apt install openjdk-11-jdk安装mys…

【c++】万字长文,浅析c++继承特性

继承 1. 继承的概念和定义1.1 概念1.2 定义1.2.1 定义格式 2.基类和派生类对象赋值转换&#xff08;##&#xff09;3. 继承中的变量和函数隐藏(#)4.派生类的默认成员函数&#xff08;###&#xff09;5.友元函数和静态成员5.1.友元函数5.2.静态成员 6.菱形继承&#xff08;###&a…

广德上汽通用汽车平行试车场

技术栈&#xff1a;使用vue2JavaScriptElement UIvuexaxioscesium 项目描述&#xff1a;广德上汽通用汽车平行试车场是依托千寻孪界开发的一套展示实时车辆位置同步展示光照&#xff0c;时间&#xff0c;阴影等特效&#xff0c;完成平行时空效果的一款软件。 工作内容&#xff…

Linux 桌面份额突破 3%

导读今天来聊一聊linux桌面。 Linux 桌面份额突破 3% 根据 Statcounter 的数据&#xff0c;Linux 的使用率在过去几年中一直在缓慢上升&#xff0c;趋势非常明显。今年&#xff0c;Linux 桌面的统计数据如下&#xff1a;一月&#xff0c;2.91%&#xff1b;二月&#xff0c;2.9…

基于Python+WaveNet+CTC+Tensorflow智能语音识别与方言分类—深度学习算法应用(含全部工程源码)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境Tensorflow 环境 模块实现1. 方言分类数据下载及预处理模型构建模型训练及保存 2. 语音识别数据预处理模型构建模型训练及保存 3. 模型测试功能选择界面语言识别功能实现界面方言分类功能实现界面 系统测试1. 训…

SpringCloud是SpringBoot 的升级版吗?有什么区别?

目录 一、什么是SpringBoot 二、什么是SpringCloud 三、SpringCloud是SpringBoot 的升级版吗 四、SpringCloud和SpringBoot 有什么区别 一、什么是SpringBoot Spring Boot是一种用于快速构建基于Spring框架的Java应用程序的开发框架。它简化了Spring应用程序的配置和部署过…

超详细图文教程:3DS Max 中创建低多边形游戏长剑模型-下部

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 在由两部分组成的教程的第一部分中&#xff0c;我向您展示了如何&#xff1a; 剑柄建模为剑的护手建模剑刃建模 在本教程系列的第二部分中&#xff0c;我将向您展示如何&#xff1a; 打开紫外线包装创建…

【Redis深度专题】「核心技术提升」探究Redis服务启动的过程机制的技术原理和流程分析的指南(基础功能分析)

探究Redis服务启动的过程机制的技术原理和流程分析的指南 Redis基本概念Redis特点说明 Redis源码结构Redis功能架构Redis启动流程初始化全局服务器配置源码分析分析说明initServerConfig方法初始化的内容保存机制的初始化策略优化的初始化策略 指定配置文件加载配置文件默认的数…

【每日运维】RockyLinux8非容器化安装Mysql、Redis、RabitMQ单机环境

系统版本&#xff1a;RockyLinux 8.6 安装方式&#xff1a;非容器化单机部署 安装版本&#xff1a;mysql 8.0.32 redis 6.2.11 rabbitmq 3.11.11 elasticsearch 6.7.1 前置条件&#xff1a;时间同步、关闭selinux、主机名、主机解析host 环境说明&#xff1a;PC电脑VMware Work…

Hadoop生态体系-HDFS

目录标题 1、Apache Hadoop2、HDFS2.1 设计目标&#xff1a;2.2 特性&#xff1a;2.3 架构2.4 注意点2.5 HDFS基本操作2.5.1 shell命令选项2.5.2 shell常用命令介绍 3、HDFS基本原理3.1 NameNode 概述3.2 Datanode概述 1、Apache Hadoop Hadoop&#xff1a;允许使用简单的编程…

webpack require.context

require.context((directory: String),(includeSubdirs: Boolean) /* 可选的&#xff0c;默认值是 true */,(filter: RegExp) /* 可选的&#xff0c;默认值是 /^\.\/.*$/&#xff0c;所有文件 */,(mode: String) /* 可选的&#xff0c; sync | eager | weak | lazy | lazy-onc…

【C#】使用this进行扩展方法以及静态类和静态成员

2023年&#xff0c;第30周&#xff0c;第2篇文章。给自己一个目标&#xff0c;然后坚持总会有收货&#xff0c;不信你试试&#xff01; 本篇文章主要简单讲讲&#xff0c;使用this进行扩展方法以及静态类和静态成员 目录 一、this扩展1、扩展条件2、举例代码 二、静态知识点1、…

【Linux网络】 网络套接字(三)socket编程_TCP网络程序

目录 TCP网络程序服务端创建套接字并绑定服务端监听服务端获取连接服务器处理请求 客户端客户端创建套接字客户端连接服务器客户端发起请求测试 服务器存在的问题多进程版的TCP网络程序多线程版的TCP网络程序线程池版的TCP网络程序 TCP网络程序总结图 TCP网络程序 服务端 创建…

一站式财务管家工具:Zoho Books审批功能详细介绍

Zoho Books作为一款功能强大的财务管理软件&#xff0c;提供了多种实用的功能&#xff0c;其中审批流程是非常重要的一个。那么&#xff0c;Zoho Books的审批功能是如何实现的呢&#xff1f;本文将为您详细介绍。 1. 什么是审批功能 审批是企业内部重要业务流程中的前置环节&a…