一、wapper介绍


Wrapper : 条件构造抽象类,最顶端父类
AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
QueryWrapper : Entity 对象封装操作类,不是用lambda语法
UpdateWrapper : Update 条件封装,用于Entity对象更新操作
AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。
LambdaQueryWrapper :看名称也能明白就是用于Lambda语法使用的查询Wrapper
LambdaUpdateWrapper : Lambda 更新封装Wrapper

@RunWith(SpringRunner.class)
@SpringBootTest
public class QueryWrapperTests {@Autowiredprivate UserMapper userMapper;
}

二、AbstractWrapper

注意:以下条件构造器的方法入参中的 column 均表示数据库字段

1、ge、gt、le、lt、isNull、isNotNull

@Test
public void testDelete() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.isNull("name").ge("age", 12).isNotNull("email");int result = userMapper.delete(queryWrapper);System.out.println("delete return count = " + result);
}

SQL:UPDATE user SET deleted=1 WHERE deleted=0 AND name IS NULL AND age >= ? AND email IS NOT NULL

2、eq、ne

注意:seletOne返回的是一条实体记录,当出现多条时会报错

@Test
public void testSelectOne() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq("name", "Tom");User user = userMapper.selectOne(queryWrapper);System.out.println(user);
}

SELECT id,name,age,email,create_time,update_time,deleted,version FROM user WHERE deleted=0 AND name = ?

3、between、notBetween

包含大小边界

@Test
public void testSelectCount() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.between("age", 20, 30);Integer count = userMapper.selectCount(queryWrapper);System.out.println(count);
}

SELECT COUNT(1) FROM user WHERE deleted=0 AND age BETWEEN ? AND ?

4、allEq

@Test
public void testSelectList() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();Map<String, Object> map = new HashMap<>();map.put("id", 2);map.put("name", "Jack");map.put("age", 20);queryWrapper.allEq(map);List<User> users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);
}

SELECT id,name,age,email,create_time,update_time,deleted,version
FROM user WHERE deleted=0 AND name = ? AND id = ? AND age = ?

5、like、notLike、likeLeft、likeRight

selectMaps返回Map集合列表

@Test
public void testSelectMaps() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.notLike("name", "e").likeRight("email", "t");List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);//返回值是Map列表maps.forEach(System.out::println);
}

SELECT id,name,age,email,create_time,update_time,deleted,version
FROM user WHERE deleted=0 AND name NOT LIKE ? AND email LIKE ?

6、in、notIn、inSql、notinSql、exists、notExists

in、notIn

  • notIn(“age”,{1,2,3})—>age not in (1,2,3)
  • notIn(“age”, 1, 2, 3)—>age not in (1,2,3)
  • inSql、notinSql:可以实现子查询
  • 例: inSql(“age”, “1,2,3,4,5,6”)—>age in (1,2,3,4,5,6)
  • 例: inSql(“id”, “select id from table where id < 3”)—>id in (select id from table where id < 3)
@Test
public void testSelectObjs() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();//queryWrapper.in("id", 1, 2, 3);queryWrapper.inSql("id", "select id from user where id < 3");List<Object> objects = userMapper.selectObjs(queryWrapper);//返回值是Object列表objects.forEach(System.out::println);
}

SELECT id,name,age,email,create_time,update_time,deleted,version
FROM user WHERE deleted=0 AND id IN (select id from user where id < 3)

7、or、and

注意:这里使用的是 UpdateWrapper
不调用or则默认为使用 and 连

@Test
public void testUpdate1() {//修改值User user = new User();user.setAge(99);user.setName("Andy");//修改条件UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();userUpdateWrapper.like("name", "h").or().between("age", 20, 30);int result = userMapper.update(user, userUpdateWrapper);System.out.println(result);
}

UPDATE user SET name=?, age=?, update_time=? WHERE deleted=0 AND name LIKE ? OR age BETWEEN ? AND ?

8、嵌套or、嵌套and

这里使用了lambda表达式,or中的表达式最后翻译成sql时会被加上圆括号

@Test
public void testUpdate2() {//修改值User user = new User();user.setAge(99);user.setName("Andy");//修改条件UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();userUpdateWrapper.like("name", "h").or(i -> i.eq("name", "李白").ne("age", 20));int result = userMapper.update(user, userUpdateWrapper);System.out.println(result);
}

UPDATE user SET name=?, age=?, update_time=?
WHERE deleted=0 AND name LIKE ?
OR ( name = ? AND age <> ? )

9、orderBy、orderByDesc、orderByAsc

@Test
public void testSelectListOrderBy() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.orderByDesc("id");List<User> users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);
}

SELECT id,name,age,email,create_time,update_time,deleted,version
FROM user WHERE deleted=0 ORDER BY id DESC

10、last

直接拼接到 sql 的最后
注意:只能调用一次,多次调用以最后一次为准 有sql注入的风险,请谨慎使用

@Test
public void testSelectListLast() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.last("limit 1");List<User> users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);
}

SELECT id,name,age,email,create_time,update_time,deleted,version
FROM user WHERE deleted=0 limit 1

11、指定要查询的列

@Test
public void testSelectListColumn() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.select("id", "name", "age");List<User> users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);
}

SELECT id,name,age FROM user WHERE deleted=0

12、set、setSql

最终的sql会合并 user.setAge(),以及 userUpdateWrapper.set() 和 setSql() 中 的字段

@Test
public void testUpdateSet() {//修改值User user = new User();user.setAge(99);//修改条件UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();userUpdateWrapper.like("name", "h").set("name", "老李头")//除了可以查询还可以使用set设置修改的字段.setSql(" email = '123@qq.com'");//可以有子查询int result = userMapper.update(user, userUpdateWrapper);
}

UPDATE user SET age=?, update_time=?, name=?, email = ‘123@qq.com’ WHERE deleted=0 AND name LIKE ?

Mybatis-Plus 条件构造器(三)相关推荐

  1. mybatis plus 条件构造器queryWrapper学习

    mybatisPlus官网地址:简介 | MyBatis-Plus为简化开发而生https://mp.baomidou.com/guide/ 一.queryWrapper是什么 queryWrappe ...

  2. SpringBoot项目集成Mybatis Plus(五)条件构造器

    Mybatis Plus 提供了强大的条件构造器,在不写sql映射文件的情况下,完成复杂的查询和修改数据的操作. 条件构造器用于生成sql的where条件,包括 QueryWrapper, Updat ...

  3. mybatis plus条件拼接

    mybatis plus条件拼接 条件构造器 案例table AbstractWrapper allEq:全部eq(或个别isNull) eq:等于 = ne:不等于 <> gt:大于 & ...

  4. 【MyBatis-Plus】第二章 条件构造器

    第二章 条件构造器 文章目录 第二章 条件构造器 一.继承关系 二.SQL 拼接方法 1.AbstractWrapper 定义 2.QueryWrapper 定义 3.UpdateWrapper 定义 ...

  5. 第 4 章 MybatisPlus 条件构造器

    第 4 章 MybatisPlus 条件构造器 1.CRUD API 的思考 对于 BaseMapper 中基本 CRUD 方法的思考 继承了 BaseMapper 接口后,我们只能获得基本的 CRU ...

  6. MP条件构造器Wrapper

    5.1 概述 我们在实际操作数据库的时候会涉及到很多的条件.所以MP为我们提供了一个功能强大的条件构造器 Wrapper .使用它可以让我们非常方便的构造条件. ​ 其继承体系如下: ​ 在其子类Ab ...

  7. mybatis批量更新数据三种方法效率对比

    探讨批量更新数据三种写法的效率问题. 实现方式有三种, 1> 用for循环通过循环传过来的参数集合,循环出N条sql,需要在db链接url后面带一个参数  &allowMultiQuer ...

  8. Java中使用es条件构造器BoolQueryBuilder

    前言 由于es在java中查询没法像mybatis那样方便,而且es的构造器使用也比较繁琐,理解不是很方便,所以写一篇文章来记录es构造器BoolQueryBuilder查询时各种条件的构造的正确姿势 ...

  9. MybatisPlus核心功能——实现CRUD增删改查操作 (包含条件构造器)

    条件构造器 一般都是用service层的方法,因为比mapper层的全.十分重要:Wrapper 记住查看输出的SQL进行分析 相当于创建一个构造器对象,然后讲需要查询or更新的条件写在里面,最后打包 ...

最新文章

  1. Elasticearch 安装 基础介绍 (一)
  2. Ubuntu报错记录(Could not get lock /var/lib/dpkg/lock-frontend问题的解决方法)
  3. 《当90后遇上创业》导读
  4. 【spring学习】02
  5. 3. Web Dynpro for ABAP: Web Dynpro Window Web Dynpro Program
  6. Springboot搭建SSM+JSP的web项目
  7. 【LOJ#10027】魔板
  8. Visio 2013导入图库
  9. 计算机数控模拟操作步骤,数控仿真
  10. java外文文献_spring框架外文文献 PDF 下载
  11. TFTP协议下载服务器指定文件夹内的图片
  12. 铁塔形变预警监测装置
  13. 中医预约管理系统都需要哪些功能?
  14. 340-写一个银行转账死锁问题并且解决
  15. 无法查看别的计算机,雨林木风win7网上邻居看不到别的电脑的解决教程
  16. Oracle怎么清除视图数据,oracle如何删除视图?
  17. html5网页特效-水墨动画
  18. 苹果/Mac电脑软件卸载不了怎么办?
  19. 【分享】SBO初始化的过程及内容
  20. 【STM32F429的DSP教程】第2章 Matlab R2018a的安装

热门文章

  1. Dell R410 broadcom网卡驱动更新失败
  2. C# chart控件实时动态显示数据
  3. 【docker问题】Client.Timeout exceeded while awaiting headers
  4. java游戏 超级酒吧女生,酒吧游戏你知道多少?22个游戏你玩过几个?
  5. 记录下配置腾讯云服务器的过程
  6. 本博客早已废除。请移步新地址
  7. Android kotlin使用id直接做view的引用
  8. 运行tensorflow-datasets遇到import tensorflow.compat.v2 as tf报错ImportError: No module named tensorflow.V2
  9. 青少年计算机编程经验,青少年学习计算机编程前景
  10. 成从武:其他人绕不开高德