目录

QueryWrapper

组装查询条件(查询用户名包含“仙”,年龄在30-40之间,邮箱信息不为空信息)

组装排序条件(查询用户信息,先按照年龄的降序排序,若年龄相同,则按照id升序排序)

组装删除条件(删除email为空的用户)

条件的优先级

组装select语句

组装子查询

模拟开发中的组装条件


QueryWrapper

  • 组装查询条件(查询用户名包含“仙”,年龄在30-40之间,邮箱信息不为空信息)

@Testpublic void test1(){//查询用户名包含“仙”,年龄在30-40之间,邮箱信息不为空信息//SELECT uid AS id,user_name AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (user_name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL)QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.like("user_name","仙").between("age",30,40).isNotNull("email");List<User> list = userMapper.selectList(queryWrapper);list.forEach(System.out::println);}

  •  组装排序条件(查询用户信息,先按照年龄的降序排序,若年龄相同,则按照id升序排序)

@Testpublic void test02(){//查询用户信息,先按照年龄的降序排序,若年龄相同,则按照id升序排序//SELECT uid AS id,user_name AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 ORDER BY age DESC,uid ASCQueryWrapper<User> queryWrapper =  new QueryWrapper<>();queryWrapper.orderByDesc("age").orderByAsc("uid");List<User> list = userMapper.selectList(queryWrapper);list.forEach(System.out::println);}

此操作之前如果年龄没有很大的变化的话我们可以适当在数据库中进行更改。运行的得到的结果如下所示:

==>  Preparing: SELECT uid AS id,user_name AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 ORDER BY age DESC,uid ASC
==> Parameters:
<==    Columns: id, name, age, email, is_deleted
<==        Row: 19, 大仙, 38, Zhangsan@zrj.com, 0
<==        Row: 12, 大仙2, 35, Zhangsan@zrj.com, 0
<==        Row: 11, 大仙1, 34, Zhangsan@zrj.com, 0
<==        Row: 13, 大仙3, 31, Zhangsan@zrj.com, 0
<==        Row: 5, Billie, 24, test5@baomidou.com, 0
<==        Row: 10, zrj4, 24, null, 0
<==        Row: 18, zrj4, 24, null, 0
<==        Row: 9, zrj3, 23, null, 0
<==        Row: 17, zrj3, 23, null, 0
<==        Row: 8, zrj2, 22, null, 0
<==        Row: 16, zrj2, 22, null, 0
<==        Row: 4, 李四, 21, atJxau@zrj.com, 0
<==        Row: 7, zrj1, 21, null, 0
<==        Row: 15, zrj1, 21, null, 0
<==        Row: 6, zrj0, 20, null, 0
<==        Row: 14, zrj0, 20, null, 0
<==      Total: 16
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1dd7796b]
User(id=19, name=大仙, age=38, email=Zhangsan@zrj.com, isDeleted=0)
User(id=12, name=大仙2, age=35, email=Zhangsan@zrj.com, isDeleted=0)
User(id=11, name=大仙1, age=34, email=Zhangsan@zrj.com, isDeleted=0)
User(id=13, name=大仙3, age=31, email=Zhangsan@zrj.com, isDeleted=0)
User(id=5, name=Billie, age=24, email=test5@baomidou.com, isDeleted=0)
User(id=10, name=zrj4, age=24, email=null, isDeleted=0)
User(id=18, name=zrj4, age=24, email=null, isDeleted=0)
User(id=9, name=zrj3, age=23, email=null, isDeleted=0)
User(id=17, name=zrj3, age=23, email=null, isDeleted=0)
User(id=8, name=zrj2, age=22, email=null, isDeleted=0)
User(id=16, name=zrj2, age=22, email=null, isDeleted=0)
User(id=4, name=李四, age=21, email=atJxau@zrj.com, isDeleted=0)
User(id=7, name=zrj1, age=21, email=null, isDeleted=0)
User(id=15, name=zrj1, age=21, email=null, isDeleted=0)
User(id=6, name=zrj0, age=20, email=null, isDeleted=0)
User(id=14, name=zrj0, age=20, email=null, isDeleted=0)
2022-11-13 09:59:15.616  INFO 8644 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2022-11-13 09:59:15.624  INFO 8644 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
  • 组装删除条件(删除email为空的用户)

@Testpublic void test03() {//删除email为空的用户//UPDATE t_user SET is_deleted=1 WHERE is_deleted=0 AND (email IS NULL)QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.isNull("email");//条件构造器也可以构建删除语句的条件int result = userMapper.delete(queryWrapper);System.out.println("受影响的行数:" + result);}

这里将之前添加的10行删除完成了,但是明显这只是逻辑删除,仅仅是将is_deleted的值设置为了1,在数据库中我们还是能看见这些数据的。

  • 条件的优先级

( 将(年龄大于20并且用户名中包含有a)或邮箱为null的用户信息修改 )

先进行数据库重新加入数据,我们的数据库中仅有一个用户邮箱为空和Sandy两个用户姓名中含有字母a,但是年龄只有Sandy的大于20,执行下面操作后我们预期效果应该是uid为4的一条数据用户信息被修改。

( 将用户名中包含有a并且(年龄大于20或邮箱为null)的用户信息修改 )

 很明显我们的第二条和第6条数据会被修改。 

代码:

@Testpublic void test04() {//将(年龄大于20并且用户名中包含有a)或邮箱为null的用户信息修改//UPDATE t_user SET user_name=?, email=? WHERE is_deleted=0 AND (user_name LIKE ? AND age > ? OR email IS NULL)QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.like("user_name","a").gt("age",20).or().isNull("email");User user = new User();user.setName("小明");user.setEmail("xiaommingyyds@zrj.com");int update = userMapper.update(user, queryWrapper);System.out.println("被修改的数据条数:"+update);}@Testpublic void test05(){//将用户名中包含有a并且(年龄大于20或邮箱为null)的用户信息修改//UPDATE t_user SET user_name=?, email=? WHERE is_deleted=0 AND (user_name LIKE ? AND (age > ? OR email IS NULL))QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.like("user_name","a").and(i->i.gt("age",20).or().isNull("email"));User user = new User();user.setName("小红");user.setEmail("xiaommingyyds@zrj.com");int update = userMapper.update(user, queryWrapper);System.out.println("被修改的数据条数:"+update);}
  • 组装select语句

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

此方法设置了我们需要查找的字段,此时通过条件构造器我们设置了"user_name","age","email"三个字段,因此也只会显示三个字段。

  • 组装子查询

@Testpublic void test07(){//查询id小于等于100的用户信息//SELECT uid AS id,user_name AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (uid IN (SELECT uid FROM t_user WHERE uid<=3))QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.inSql("uid","SELECT uid FROM t_user WHERE uid<=3");List<User> list = userMapper.selectList(queryWrapper);list.forEach(System.out::println);}

  •  模拟开发中的组装条件

实际应用中我们的这些条件都是用户在浏览器页面中进行选择然后传递到服务器中,然后在服务器中我们的服务器将他们拼接到SQL语句里面。在进行组装之前我们的querryMapper要先进行判断用户是否选择了。

 布尔类型的condition简化 

 LambdaQueryWrapper简化(防止字段名写错)

在使用了lambda表达式之后我们就不能使用字符串指定字串名了,需要使用函数表达式来指定。

LambdaUpdateWrapper 更新数据

 lambda代码:

@Testpublic void test10(){String username = "小";Integer ageBegin = null;Integer ageEnd = 23;//SELECT uid AS id,user_name AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (user_name LIKE ? AND age <= ?)LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();//避免使用字符串表示字段,防止运行时错误使用Lambda表达式--User::get属性--queryWrapper.like(StringUtils.isNotBlank(username),User::getName,username).ge(ageBegin!=null,User::getAge,ageBegin).le(ageEnd!=null,User::getAge,ageEnd);List<User> list = userMapper.selectList(queryWrapper);list.forEach(System.out::println);}@Testpublic void test11(){//组装set子句LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();updateWrapper.set(User::getAge, 18).set(User::getEmail, "xiaommingyyds@zrj.com").like(User::getName, "小").and(i -> i.lt(User::getAge, 24).or().isNull(User::getEmail)); //lambda表达式内的逻辑优先运算//UPDATE t_user SET age=?,email=? WHERE is_deleted=0 AND (user_name LIKE ? AND (age < ? OR email IS NULL))User user = new User();int result = userMapper.update(user, updateWrapper);System.out.println("受影响的行数:" + result);}

【Mybatisplus】创建spring boot工程QueryWrapper的使用相关推荐

  1. 【Mybatisplus】创建Spring Boot工程打包错误解决方法

    目录 打包问题解决方法在文章末尾 创建Spring Boot工程 a.初始化工程 b.引入依赖 编写代码 a.配置application.yml 了解一下配置application.propertie ...

  2. 【Mybatisplus】创建Spring Boot工程实现用户自定义功能Service接口和常用注解总结

    目录 1.测试自定义功能 2.通用Service 创建Service接口和实现类 测试查询数据库中有多少条记录 测试批量添加操作(通过单个批量增加循环实现) 3.常用注解(@TableName) 解决 ...

  3. 使用Maven创建多模块父子Spring Boot工程

    使用Maven创建Spring Boot工程_紫月下枫叶的博客-CSDN博客目录1.开发环境2.创建普通maven工程3.添加Spring Boot父工程4.添加Web场景依赖5.添加主程序6.添加C ...

  4. maven web项目导入sts_Spring Boot2 系列教程(二)创建 Spring Boot 项目的三种方式

    我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 43W+,如下图: 2017 年由于种种原因,就没有 ...

  5. Spring Boot 工程创建

    Spring Boot 工程创建(本文介绍使用方法一) 首先是搞清楚Spring boot 工程是什么:个人理解是对Spring MVC的封装,简化.不用配置那么多xml信息,可以选择Start中的自 ...

  6. Spring boot工程创建

    2019独角兽企业重金招聘Python工程师标准>>> 环境配置 Mac OS 10.12.2 IntelliJ IDEA 14.0.2(自己网上搜下注册码) Java SDK 1. ...

  7. Spring Boot 工程集成全局唯一ID生成器 Vesta

    2019独角兽企业重金招聘Python工程师标准>>> 本文内容脑图如下: 文章共 760字,阅读大约需要 2分钟 ! 概 述 在前一篇文章 <Spring Boot工程集成全 ...

  8. STS创建Spring Boot项目实战(Rest接口、数据库、用户认证、分布式Token JWT、Redis操作、日志和统一异常处理)

    STS创建Spring Boot项目实战(Rest接口.数据库.用户认证.分布式Token JWT.Redis操作.日志和统一异常处理) 1.项目创建 1.新建工程 2.选择打包方式,这边可以选择为打 ...

  9. 初学Java 从0-1创建Spring boot+Mybatis - plus+Swagger2+Mysql(代码生成器)

    第一章 初学Java 创建Spring boot+Mybatis-plus+mysql 目录 一.创建项目 二.配置pom.xml 三.配置application.yml 四.增加Mybatis-pl ...

最新文章

  1. 基本概念/MM相关概念
  2. NB-IOT终端技术新突破 中兴微电子加快IoT布局
  3. 实时数仓入门训练营:实时计算 Flink 版 SQL 实践
  4. MySQL 计算两个时间的差值
  5. Levmar:VS2015编译Levmar及Demo示例
  6. Spring 常见问题( 持续更新... ... )
  7. Jmeter+jenkins+ant自动化测试环境搭建
  8. umts是移动还是联通_联通与电信合建5G:核心网各自建设 5G频率资源共享
  9. hcia是什么等级的证书_华为hcia是什么等级的证书
  10. 提取多个文件夹图片到一个文件夹
  11. 流程挖掘如何助力采购数字化转型?
  12. 《漫画机器学习入门》总结
  13. 用树莓派搜寻地外文明
  14. 【最全】ISTQB- FL模拟题(含答案)
  15. 幼儿园数学目标_幼儿园大班数学计划
  16. libxml2经验--xmlReadFile
  17. Python中的取模运算
  18. Lifecycle与LiveData的珠联璧合
  19. FPGA系统性学习笔记连载_Day1数字电路基础篇
  20. MISC 部分入门套路和心得

热门文章

  1. 好文推荐:强悍VC:谍影迷踪
  2. 从“透支话费90万被判无期”案看国际长途盗打
  3. 计算机毕业设计Java课程资源管理平台(源码+mysql数据库+系统+lw文档)
  4. 计算机考研复试面试常问问题 计算机网络篇(上)
  5. 案例1:使用awk提取文本案例2:awk处理条件案例3:awk综合脚本应用案例4:awk流程控制案例5:awk扩展应用
  6. oracle中的roll up,oracle  group by 与roll up,cube,grouping sets,grouping_id联合使用
  7. MATLAB学习笔记1:MATLAB概述
  8. roadflow 企业微信 工作流程引擎的配置与使用
  9. Osgearth设置平面投影显示
  10. leetcode6-zigzag conversion