MyBatis-Plus学习3 Wrapper条件构造器

 组装查询Wrapper

    @Testpublic void test01() {// 查询用户名包含a,年龄在20-30之间,邮箱信息不为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);}@Testpublic void test02() {// 查询用户信息,按照年龄的降序排序,若年龄相同,则按照id升序排序QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.orderByDesc("age").orderByAsc("id");List<User> list = userMapper.selectList(queryWrapper);list.forEach(System.out::println);}

需要注意的点:

1、操作的字段是数据库中的字段名

2、使用了TableLogic之后,只会筛选没有被逻辑删除的数据

组装删除Wrapper(删除使用QueryWrapper,若使用了TableLogic则还是逻辑删除)

    @Testpublic void test03() {// 删除邮箱为null的数据QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.isNull("email");int result = userMapper.delete(queryWrapper);//实际执行的sql:UPDATE user SET is_deleted=1 WHERE is_deleted=0 AND (email IS NULL)System.out.println("result = " + result);}

使用QueryWrapper来实现update修改功能

    @Testpublic void test04() {// 使用QueryWrapper来实现update修改功能// 将(年龄大于20并且用户名中包含有a)或者邮箱为null的用户信息修改QueryWrapper<User> queryWrapper = new QueryWrapper();queryWrapper.gt("age", 20).like("name", "a").or().isNull("email");User user = new User();user.setName("小明");user.setEmail("test@qq.com");int result = userMapper.update(user, queryWrapper);//UPDATE user SET name=?, email=? WHERE is_deleted=0 AND (age > ? AND name LIKE ? OR email IS NULL)System.out.println("result = " + result);}

使用and(或or)方法中的lamda表达式调整查询顺序

    @Testpublic void test05() {// 将用户名中包含有a 并且 (年龄大于20 或 邮箱为null) 的用户信息修改QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.like("name", "a").and(i->i.gt("age", 20).or().isNull("email"));User user = new User();user.setName("小红");user.setEmail("test@qq.com");int result = userMapper.update(user, queryWrapper);//UPDATE user SET name=?, email=? WHERE is_deleted=0 AND (name LIKE ? AND (age > ? OR email IS NULL))System.out.println("result = " + result);}

选择指定的查询字段

    @Testpublic void test06() {// 查询用户名,年龄,邮箱信息QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.select("name", "age", "email");List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);maps.forEach(System.out::println);}

通过子查询方式进行查询

    @Testpublic void test07() {// 查询id 小于等于100的用户信息, 通过子查询方式查询QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.inSql("id", "select id from user where id <= 100");List<User> list = userMapper.selectList(queryWrapper);//SELECT id,age,name,email,is_deleted FROM user WHERE is_deleted=0 AND (id IN (select id from user where id <= 100))list.forEach(System.out::println);}

组装UpdateWrapper实现修改(可以指定字段修改)

    @Testpublic void test08() {// 将用户名中包含a并且 (年龄大于20 或 邮箱为null) 的用户信息修改UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();// 设定筛选条件updateWrapper.like("name", "a").and(i->i.gt("age", 20).or().isNull("email"));// 设定修改内容updateWrapper.set("name", "小黑").set("email", "abc@qq.com");// UPDATE user SET name=?,email=? WHERE is_deleted=0 AND (name LIKE ? AND (age > ? OR email IS NULL))int result = userMapper.update(null, updateWrapper);System.out.println("result = " + result);}

通过condition判断是否需要组装

    @Testpublic void test10() {String name = "a";Integer ageBegin = 20;Integer ageEnd = 30;QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.like(StringUtils.isNotBlank(name),"name", name).ge(ageBegin != null, "age", ageBegin).le(ageEnd != null, "age", ageEnd);List<User> list = userMapper.selectList(queryWrapper);list.forEach(System.out::println);}

LamdaQueryWrapper(第二个变量处使用了lamda表达式,函数式接口来代替字符串,避免手动写表的属性写错)

    @Testpublic void test11() {String name = "a";Integer ageBegin = 20;Integer ageEnd = 30;LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.like(StringUtils.isNotBlank(name), User::getName, name).ge(ageBegin != null, User::getAge, ageBegin).le(ageEnd != null, User::getAge, ageEnd);List<User> list = userMapper.selectList(lambdaQueryWrapper);list.forEach(System.out::println);}

LamdaUpdateWrapper

    @Testpublic void test12() {// 将用户名中包含a并且 (年龄大于20 或 邮箱为null) 的用户信息修改LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();// 设定筛选条件lambdaUpdateWrapper.like(User::getName, "a").and(i->i.gt(User::getAge, 20).or().isNull(User::getEmail));// 设定修改内容lambdaUpdateWrapper.set(User::getName, "小黑").set(User::getEmail, "abc@qq.com");int result = userMapper.update(null, lambdaUpdateWrapper);System.out.println("result = " + result);}

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

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

相关文章

MySQL实战解析底层---“order by“是怎么工作的

目录 前言 全字段排序 rowid排序 全字段排序 VS rowid排序 前言 在开发应用的时候&#xff0c;一定会经常碰到需要根据指定的字段排序来显示结果的需求以举例市民表为例&#xff0c;假设你要查询城市是“杭州”的所有人名字&#xff0c;并且按照姓名排序返回前1000个人的姓…

使用Strve.js来搭建一款 Markdown 编辑器

今天&#xff0c;我们来使用Strve.js来搭建一款 Markdown 编辑器&#xff0c;没错&#xff01;你没听错。我们需要创建了一个实时 Markdown 编辑器&#xff0c;用户可以在 textarea 中输入 Markdown 文本&#xff0c;然后实时显示转换后的 HTML。你可能会说使用 Strve.js 开发会…

Java——《面试题——maven篇》

全文章节 Java——《面试题——基础篇》 Java——《面试题——JVM篇》 Java——《面试题——多线程&并发篇》 Java——《面试题——Spring篇》 Java——《面试题——SpringBoot篇》 Java——《面试题——MySQL篇》​​​​​​ Java——《面试题——SpringCloud》 Java——…

活动打卡报名小程序开源版开发

活动打卡报名小程序开源版开发 活动打卡报名小程序开源版的功能可以包括以下几个方面&#xff1a; 活动列表展示&#xff1a;展示所有的活动信息&#xff0c;包括活动名称、时间、地点、报名人数等。活动详情展示&#xff1a;点击活动列表中的某个活动&#xff0c;可以查看该…

jenkins共享库配置及设计

jenkins共享库做模块封装时遇到的问题总结&#xff1a; 背景描述:使用jenkins共享库对SCM subversion操作进行封装时&#xff0c;使用了Checkout插件&#xff0c;生成的检出脚本代码为 checkout([$class: SubversionSCM, additionalCredentials: [], excludedCommitMessages: …

【C#】并行编程实战:实现数据并行(2)

本章继续学习实现数据并行&#xff0c;本文主要介绍任务并行度和自定义分区策略相关内容。 本教程对应学习工程&#xff1a;魔术师Dix / HandsOnParallelProgramming GitCode 2、任务并行度 数据并行设计在系统的多个内核上以并行方式运行循环所带来的的优势&#xff…

mac苹果电脑,怎么批量修改文件名称

mac苹果电脑&#xff0c;如何批量修改文件名称&#xff1f;在苹果电脑上对文件名称进行修改是一件非常简单的操作&#xff0c;相信任何mac电脑用户都知道怎么操作&#xff0c;只需要选中要修改名称的文件&#xff0c;然后点击鼠标右键&#xff0c;然后会弹出一个菜单&#xff0…

基于 FFmpeg 的跨平台视频播放器简明教程(四):像素格式与格式转换

系列文章目录 基于 FFmpeg 的跨平台视频播放器简明教程&#xff08;一&#xff09;&#xff1a;FFMPEG Conan 环境集成基于 FFmpeg 的跨平台视频播放器简明教程&#xff08;二&#xff09;&#xff1a;基础知识和解封装&#xff08;demux&#xff09;基于 FFmpeg 的跨平台视频…

(五)Qt 动态手势识别“左右滑动”以及实现翻页效果

系列文章目录 通过Qt实现手势识别控制软件操作相关系列技术方案 &#xff08;一&#xff09;Qt 将某控件、图案绘制在最前面的方法&#xff0c;通过QGraphicsScene模块实现 &#xff08;二&#xff09;Qt QGraphicsScene模块实现圆点绘制在所有窗体的最前方&#xff0c;实现圆…

Git快速入门

Git 1、Git概述Git简介Git下载与安装 2、Git代码托管服务常用的Git代码托管服务使用码云托管服务 3、Git常用命令Git全局设置获取Git仓库工作区、暂存区、版本库概念本地仓库常用命令远程仓库操作命令分支操作标签操作 4、在IDEA中使用Git在IDEA中配置Git获取Git仓库本地仓库操…

【ISO26262】汽车功能安全:以汽车安全完整性等级为导向和以安全为导向的分析

关于 ASIL剪裁的要求分解 表 A.1 以汽车安全完整性等级为导向和以安全为导向的分析的概览

Vue常见面试题整理

一、对于MVVM的理解&#xff1f; MVVM是Model-View-ViewModel的缩写。 Model&#xff1a;代表数据模型&#xff0c;也可以在Model中定义数据修改和操作的业务逻辑。View&#xff1a;代表UI组件&#xff0c;它负责将数据模型转化成UI展现出来。ViewModel&#xff1a;监听模型数…