SpringBoot整合Mybatis Plus——条件构造器Wrapper

news2024/9/25 23:19:54

         Mybatis Plus为我们提供了如下的一些条件构造器,我们可以利用它们实现查询条件、删除条件、更新条件的构造。

条件构造器 | MyBatis-Plus (baomidou.com)

一、通过maven坐标引入依赖(注意版本!!)

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.1.2</version>
</dependency>
<!-- mysql -->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <scope>runtime</scope>
</dependency>
<!-- lombok -->
<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <optional>true</optional>
</dependency>

二、application配置数据源及日志输出级别

# 配置数据源
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.161.3:3306/testdb?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: 
    password: 

# 配置日志
logging:
  level:
    root: warn
    com.zimug.boot.launch.mapper: trace

三、配置Mybatis的Mapper类文件的包扫描路径

@SpringBootApplication
@MapperScan(basePackages = {"com.zimug.boot.launch.mapper"})
public class BootLaunchApplication {
    public static void main(String[] args) {
        SpringApplication.run(BootLaunchApplication.class, args);
    }
}

四、创建数据表并构建实体和对应的Mapper

DROP TABLE IF EXISTS user;
CREATE TABLE user
(
	id BIGINT(20) NOT NULL COMMENT '主键ID',
	name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
	age INT(11) NULL DEFAULT NULL COMMENT '年龄',
	email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY (id)
);
DELETE FROM user;
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

编写实体类User.java。

@Data   //lombok注解
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

编写Mapper类UserMapper.java

public interface UserMapper extends BaseMapper<User> {
}

 五、使用UpdateWrapper自定义条件修改数据

  • updateWrapper用于给update方法传条件参数
UpdateWrapper<User> update = new UpdateWrapper<>();
update.eq("name", "Jack").eq("age", 28);    //eq是MP的条件构造器,表示"等于"关系

User user = new User();
user.setAge(29);
user.setEmail("hadoopcn2@163.com");
int rows = userMapper.update(user, update);
System.out.println("影响记录数:" + rows);

  六、使用QueryWrapper自定义条件修改数据

  • queryWrapper用于给delete和select方法传参
QueryWrapper<User> query = new QueryWrapper<>();
query.like("name", "J")    //like是MP的条件构造器,表示"模糊查询"
  .lt("age", 40)     //lt是MP的条件构造器,表示"小于"关系
  .select("name", "age");
List<Map<String, Object>> maps = userMapper.selectMaps(query);
maps.forEach(System.out::println);
QueryWrapper<User> query = new QueryWrapper<>();
query.select("name", "age")   //指定查询结果字段
  .in("age", Arrays.asList(30, 31, 34, 35))
  .last("limit 1");
List<User> list = userMapper.selectList(query);
list.forEach(System.out::println);
String name = "字母";  //name不为空
String email = "";   //email为空串
QueryWrapper<User> query = new QueryWrapper<>();
query.like(StringUtils.isNotEmpty(name), "name", name)
      //因为email为空串,该条件未生效
     .like(StringUtils.isNotEmpty(email), "email", email);    

List<User> list = userMapper.selectList(query);
list.forEach(System.out::println);

所以最终的执行SQL,如下(只有name LIKE条件,没有email LIKE 条件):

SELECT id,name,age,email
FROM user 
WHERE name LIKE %字母%

        关于 like  几乎所有的条件构造函数,都提供了condition参数实现动态SQL。也就是参数判断是否返回true,如果返回false,该条件不成立。如email=“”,所以.like(StringUtils.isNotEmpty(email), "email", email); 的条件不成立。

//构造条件
QueryWrapper<User> query = new QueryWrapper<>();
Map<String, Object> params = new HashMap<>();
params.put("name", "字母哥");
params.put("age", 18);
params.put("email", null);

// query.allEq(params,false);
query.allEq((k, v) -> !k.equals("name"), params, false);
List<User> list = userMapper.selectList(query);
list.forEach(System.out::println);

 all表示所有  ;Eq是equal的缩写表示相等关系 。最终执行的SQL如下:

SELECT id,name,age,email
FROM user 
WHERE age = ?
  • 第一个参数是过滤器(可选参数),lambda表达式表示(k, v) -> !k.equals("name"),参数的Key不能是name,所以params.put("name", "字母哥");这个查询条件被过滤掉
  • 第二个参数表示传入所有的params查询参数
  • 第三个参数(可选参数),表示如果值为null是否按IS NULL查询,false则忽略null列的查询,所以params.put("email", null);这个查询条件被过滤掉

 七、lambda条件构造器

// LambdaQueryWrapper<User> lambdaQ = new QueryWrapper<User>().lambda();
// LambdaQueryWrapper<User> lambdaQ = new LambdaQueryWrapper<>();
LambdaQueryWrapper<User> lambdaQ = Wrappers.lambdaQuery();
lambdaQ.like(User::getName, "字母")
       .lt(User::getAge, 18);
List<User> list = userMapper.selectList(lambdaQ);

lambda条件构造器,最终执行SQL如下:

SELECT id,name,age,email
FROM user 
WHERE name LIKE %字母%
AND age < 18
List<User> list = new LambdaQueryChainWrapper<User>(userMapper)
        .likeRight(User::getName, "字母")
        .and(q -> q.lt(User::getAge, 40)
                  .or()
                  .isNotNull(User::getEmail)
        )
        .list();
list.forEach(System.out::println);

lambda条件构造器,最终执行SQL如下:

SELECT id,name,age,email
FROM user 
WHERE name LIKE '字母%'
AND ( age < 40 OR email IS NOT NULL )

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

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

相关文章

Vulnhub: ICMP: 1靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.208 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.208 80端口的cms为Monitorr 1.7.6m 搜索发现该版本的cms存在远程代码执行 searchsploit monitorr 漏洞利用 nc本地监听&…

GEE-PIE遥感大数据处理与典型案例教程

详情点击链接&#xff1a;GEE-PIE遥感大数据处理与典型案例教程 一&#xff1a;GEE和PIE遥感云平台 1.GEE和PIE平台及典型应用案例 2.JavaScript基础&#xff0c;包括变量&#xff0c;运算符&#xff0c;数组&#xff0c;判断及循环语句等 3.遥感云重要概念与典型数据分析流程…

水电站数字孪生三维可视化展示开发

一、智慧污水处理厂数字孪生系统 智慧污水处理厂结合视频识别、机器人、BIM、互联网、物联网、云计算及大数据等技术&#xff0c;在前期进行精细化设计&#xff0c;实现水质达标&#xff0c;安全生产、高效节能等生产、运营和管理目标&#xff0c;从而达到提升城市生活污水处理…

深度学习实战49-基于卷积神经网络和注意力机制的汽车品牌与型号分类识别的应用

大家好,我是微学AI,今天给大家介绍一下深度学习实战49-基于卷积神经网络和注意力机制的汽车品牌与型号分类识别的应用,该项目就像是一只智慧而敏锐的眼睛,专注地凝视着汽车世界。这个项目使用PyTorch作为强有力的工具,提供了一个深度学习的舞台,让我们能够设计和训练一个…

qiiuzhiji4

本篇是从慧与离职后到2023年8月21日这段时间的经历 2023/7/31至2023/8/21 本篇初次写于2023年8月21日 从慧与离职后基本上就是在专心找工作了&#xff0c;但是有在这段时间找工作经历的人都明白&#xff0c;IT行业不复以往了。尤其是对于我这样的普通二本学历的人来说&#xff…

CW4-6A-S、CW4-10A-S、CW4-20A-S、CW4-30A-S螺栓式滤波器

CW3L2-3A-S、CW3L2-6A-S、CW3L2-10A-S、CW3L2-20A-S CW3-3A-S、CW3-6A-S、CW3-10A-S、CW3-20A-S、CW3-30A-S CW4EL2-3A-S、CW4EL2-6A-S、CW4EL2-10A-SCW4EL2-20A-S、CW4EL2-30A-S CW4E-3A-S、CW4E-6A-S、CW4E-10A-S、CW4E-20A-S、CW4E-30A-S CW4E-40A-S(001)、CW4E-50A-S(0…

Lnton羚通算法算力云平台在环境配置中Windows10终端和VSCode下如何打开Anaconda-Prompt

在Windows 10的终端和VSCode中&#xff0c;可以直接打开Anaconda Prompt。下面是两种方法&#xff1a; Windows 10终端&#xff1a;在开始菜单中搜索"Anaconda Prompt"&#xff0c;然后点击打开。这将启动Anaconda Prompt终端&#xff0c;你可以在其中执行conda相关命…

得帆创始人张桐:低代码平台的定位和解答

很多朋友都有疑问&#xff1a;得帆服务了非常多的500强大型企业&#xff0c;是不是只有大型企业才能把低代码用好&#xff1f;是不是只有大型企业才能用低代码提升效率和降低成本&#xff1f;是不是大型企业才有经济实力去购买和使用低代码软件&#xff1f;低代码&#xff0c;零…

【现场问题】arthas,线上查看某一个类的,某一个方法,入参是什么【类似于断点操作】

arthas arthas下载方式方法 arthas下载 我的链接。免费的放心下 方式方法 watch 类名 方法名 -b “{params}” -x 3 这里的3 是指 第几个层级 watch org.apache.dolphinscheduler.api.service.ExecutorService startCheckByProcessDefinedId -b "{params}" -x 3…

6篇 ICML 2023 杰出论文解析,涉及无学习率、LLM水印、域泛化等方向

ICML 全称 International Conference on Machine Learning&#xff0c;由国际机器学习学会&#xff08;IMLS&#xff09;举办&#xff0c;是计算机人工智能领域的顶级会议。今年的 ICML 大会已是第 40 届&#xff0c;共收到 6538 份投稿&#xff0c;有1827 份被接收&#xff0c…

速通蓝桥杯嵌入式省一教程:(七)定时器输入捕获中断与PWM频率占空比测量

前文已经讲述过定时器的两个用法&#xff1a;基本定时中断与PWM输出。本节接着介绍第三种用法&#xff1a;定时器输入捕获中断。 在此之前&#xff0c;需要解释一下前文一直出现过的与定时器有关的概念。 定时器(TIMER)&#xff1a;所谓定时器&#xff0c;其基本功能就是定时…

strstr的学习与使用及实现/查找字符串中的字符

在字符串中查找字符或字符串 strstr函数传入两个字符串&#xff0c;并返回查找后的首地址&#xff0c;找不到返回NULL 模拟实现 char* my_strstr( char* str1, const char* str2) {int i, j;assert(str1 && str2);//断言判断一下for ( i 0; i < strlen(str1); i){f…

【G-LAB】网络工程师常用排错命令详细版

网络工程师在日常配置中难免出现各种配置错误&#xff0c;比如接口地址配错、掩码位数配错、接口忘记no shutdown。除去这些基础错误&#xff0c;在配置各种路由选择协议时也会因为网络类型、邻居类型、区域和路由器层级等各种问题使邻居无法建立、路由无法传递进而导致网络不通…

Apipost中自定义接口字段如何配置

Apipost项目设置中可以配置接口文档中的自定义接口字段&#xff0c;创建状态码字典。分享分档时会展示到文档页面 状态码字典 在状态码字典中可以自定义状态码即其含义 自定义的状态码会在分享的API文档中展示 接口属性 接口属性中可以自定义接口和接口文档展示字段&#xf…

使用Python批量将飞书文档转为MD

说明&#xff1a;飞书是在线文档平台&#xff0c;本文介绍如何使用Python程序批量将飞书文档转为MD文档&#xff0c;并下载到本地&#xff1b; 复制地址 首先&#xff0c;把文档的URL都复制下来&#xff0c;这个需要一个一个点&#xff0c;并复制拷贝&#xff0c;但却是工作量…

【HCIP】10.路由策略

&#x1f4ce;13 路由策略与路由控制.pptx 通过修改路由的属性&#xff0c;影响了路由的生成及选路&#xff0c;最终影响了转发流量的路径&#xff1b;控制平面。 ACL IP prefix Filter-Policy Router-Policy 笔记

巴适得很!影驰2023“势在必燃”线下新品体验会成都站精彩回顾

全新一代的RTX 40系显卡早已和大家见面&#xff0c;其全新带来的核心架构、性能动力以及DLSS 3等技术黑科技&#xff0c;都为大家带来了不一样的惊喜。影驰 RTX 40 系显卡如今已经上线了诸多新品&#xff0c;更有DDR5系列的高频内存以及全新技术加持的PCI-E 5.0 SSD强势来袭&am…

Hadoop分布式计算与资源调度:打开专业江湖的魔幻之门

文章目录 版权声明一 分布式计算概述1.1 分布式计算1.2 分布式&#xff08;数据&#xff09;计算模式1.3 小结 二 MapReduce概述2.1 分布式计算框架 - MapReduce2.2 MapReduce执行原理2.3 小结 三 YARN概述3.1 YARN & MapReduce3.2 资源调度3.3 程序的资源调度3.4 YARN的资…

微信怎么添加更多的好友?通过后还能自动打招呼?

近期好多客户来问想把抖音、淘宝等平台的客户引流到自己的微信号里&#xff0c;打造自己的私域流量池&#xff0c;有什么办法能快捷地批量自动添加客户好友的微信呢&#xff1f;怎么规避加太多频繁的问题呢&#xff1f; 今天&#xff0c;我们来一一解决&#xff0c;都知道加好…

Python连接DB2数据库

安装Python DB2驱动 pip install ibm_db待更新