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 均表示数据库字段

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

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 = ?

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 ?

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 = ?

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 ?

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)

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 ?

嵌套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 <> ? )

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 DE

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

指定要查询的列

@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

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 ?

MybatisPlus实现条件查询相关推荐

  1. MyBatis-Plus的条件查询(只举例部分方便使用)

    DQL编程控制 查询条件 查询范围(>.=.between) 模糊查询(like) 空判定(null) 包含性匹配(in) 分组(group) 排序(order) -- 等匹配=: Lambda ...

  2. springboot封装统一查询对象进行多条件查询案例(mybatis和mybatis-plus+反射两种版本)

    文章目录 mybatis版本: 通用查询接口 封装辅助查询类: 通用controller: 自定义注解 controller service mapper测试 mybatis-plus实现版本 ent ...

  3. mybatisplus的详细使用(自动填充,乐观锁,分页,条件查询)

    1.自动填充 @Data @EqualsAndHashCode(callSuper = false) @TableName("t_user") public class User ...

  4. Mybatis-Plus查询之条件查询(用户名查询)(批量查询)

    Mybatis-Plus查询之条件查询(用户名查询)(批量查询) 上代码 上代码 //查询多个用户//Arrays.asList 工具类List<User> users = iUserRe ...

  5. MyBatis-Plus Wrapper条件构造器查询大全

    一.引言 那么那么那么今天来说下MP中强大的条件查询功能. 本章是基于上个案例来讲的:MyBaits-Plus 快速入门案例 二.具体操作 首先来说说基本的查询吧,根据主键或者简单的查询条件进行查询. ...

  6. Mybatis-plus条件查询构造器

    Mybatis-plus条件查询构造器 一.wapper介绍 二.AbstractWrapper 1.ge.gt.le.lt.isNull.isNotNull 2.eq.ne 3.between.no ...

  7. mybatis-plus在Mapper类中使用@select标签进行多表联合动态条件查询

    1.单表动态条件查询 1)单字段作为参数 直接用@param设置的值作为注入就好了 @Select("select * from ppms_person_message where crea ...

  8. Mybatis-plus :分页带条件查询

    StudentController @ApiOperation("分页带条件查询学生信息")@GetMapping("/getStudentByOpr/{pageNo}/ ...

  9. Shardingsphere的分库分表+读写分离+分页条件查询

    Shardingsphere的分库分表与读写分离 导入依赖 <dependencies><dependency><groupId>org.springframewo ...

最新文章

  1. Study on Android【三】--Intent消息传递
  2. margin的塌陷现象
  3. Stanford机器学习笔记-6. 学习模型的评估和选择
  4. 登录日志怎么实现_【创新攻关】安全室构建异常登录行为检测审计模型
  5. 大学python笔记_Python 上手笔记
  6. html5+、ReactNative、Weex、Ionic之间的区别、(配置java、python、Android环境)、ReactNative(react-native-cli)、yarn、Weex
  7. 关于redis性能问题分析和优化
  8. Java8初体验(二)Stream语法详解
  9. win10硬盘锁怎么解除_Win10磁盘被写保护怎么解除?
  10. 【Java】位运算符---算术右移和逻辑右移、算术左移和逻辑左移
  11. 2020年育婴员(五级)报名考试及育婴员(五级)模拟考试题
  12. Android 仿美拍,秒拍 ,视频封面选择.有图有真相.
  13. 使用token验证登录信息,把token存到数据库中
  14. 汽车厂商 API数据接口
  15. uniapp,h5微信如何分享页面,完整设置分享链接图片简介
  16. Docker报错:copy file range failed: no space left on device
  17. Greenshot 学习笔记(2) Greenshot.Drawing.Gripper类
  18. 关于photoswipe的data-size问题-自适应宽高
  19. Visual Studio Code 插件推荐安装
  20. 《我是一只IT小小鸟》连载三

热门文章

  1. 操作Frame和IFrame中页面元素
  2. 【译】x86程序员手册06 - 2.4指令格式
  3. 12-16php测试题
  4. Spring 实例化bean的三种方式
  5. linux中socket的理解---4
  6. 1061: [Noi2008]志愿者招募 - BZOJ
  7. Python获取一个字符串所有连续子串
  8. Java多线程初学者指南(5):join方法的使用
  9. 昨天一天都没怎么看书。。。
  10. redis之sorted sets类型及操作