mybatis | 您所在的位置:网站首页 › wrapper不等于查询 › mybatis |
特此说明: 本文主要是自己学习记录和查询 本文主要内容,参考了如下文章,感谢作者的不吝赐教。 Wrapper条件构造器_LuckyLay的博客-CSDN博客_条件构造器wrapper Mybatis-Plus中Wrapper条件构造器的使用_扎哇太枣糕的博客-CSDN博客_条件构造器wrapper 目录 构造器结构: 常用方法记录 Wrapper条件构造器 1 queryWrapper构造器 1.1 组装删改查条件 1.2 条件优先级 1.3 实现子查询 2 updateWrapper构造器 2.1 升级修改方法(无需创建对象) 3 lambdaXxxWrapper构造器 3.1 lambdaQueryWrapper构造器 3.2 lambdaUpdateWrapper构造器 构造器结构:常用方法记录 在AbstractWrapper中提供的一些方法。 eq、allEq、neeq:等于,参数一个条件 allEq:全等于,参数是一个map集合,可以一次匹配多个条件, ne:不等于 gt、ge、lt、legt:大于 ge:大于等于 lt:小于 le:小于等于 between、notBetweenbetween :在两个值之间 notBetween: 不在两个值之间 like、notLike、likeLeft、likeRightlike:’%值%’ notLike:’%值%’ likeLeft:’%值’ likeRight:‘值%’ isNull、isNotNullisNull:字段 IS NULL isNotNull:字段 IS NOT NULL in、notInin:字段 IN (v0, v1, …) notIn:字段 NOT IN (value.get(0), value.get(1), …) inSql、notInSqlinSql:字段 IN ( sql语句 ) notInSql:字段 NOT IN ( sql语句 ) or、andor:拼接 and 嵌套 注意:主动调用or表示紧接着下一个方法不是用and连接!(不调用or则默认为使用and连接) exists、notExistsexists:拼接 EXISTS ( sql语句 ) notExists:拼接 NOT EXISTS ( sql语句 ) orderBy、orderByAsc、orderByDescorderBy:指定是否排序,升序还是降序 orderByAsc:排序,ORDER BY 字段, … ASC orderByDesc:排序,ORDER BY 字段, … DESC Wrapper条件构造器条件构造器wrapper就是用来封装CRUD方法参数条件的一个接口,其底层有很多的子类,最主要的就是最下面的四个子类: queryWrapper可以用来删改查updateWrapper可以在修改操作时不必创建实体类对象的操作LambdaQueryWrapper和LambdaUpdateWrapper则是在字段参数的调用上进行了升级,其他都一样 因为增删改查中的增加记录不需要条件即可完成,所以增加方法无需条件构造器wrapper,其他的删改查则是有这个条件构造器参数的 1 queryWrapper构造器 1.1 组装删改查条件组装查询条件 查询条件为:名字里包含a字母、年龄在20~30之间、email不为空的所有值,且查询到的值按照年龄降序排序,若年龄相同则按照id升序排序 查询返回name、age、email字段 @Test public void selectListTest() { QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.select("name", "age", "email") .like("name", "a") .between("age", 20, 30) .isNotNull("email") .orderByDesc("age") .orderByAsc("id"); // SELECT id,name,age,email,is_deleted FROM user WHERE is_deleted=0 AND (name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL) ORDER BY age DESC,id ASC List maps = mapper.selectMaps(queryWrapper); maps.forEach(System.out::println); System.out.println("========================================================================================"); List users = mapper.selectList(queryWrapper); users.forEach(System.out::println); } selectMaps和selectList的区别在于:selectMaps会将查询到的结果封装在一个元素类型为map集合的list集合中,集合中只有查询返回字段所对应的键值对;而selectList的返回值也是一个list集合,只不过元素类型为对应的泛型,包含泛型所有的字段,查询返回字段之外的值都为null 组装删除条件 删除条件:email不为空 @Test public void deleteTest() { QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.isNull("email"); // UPDATE user SET is_deleted=1 WHERE is_deleted=0 AND (email IS NULL) int result = mapper.delete(queryWrapper); System.out.println("删除的行数为" + result); }组装修改条件 修改条件:(年龄大于20并且用户名中包含有a)或邮箱为null @Test public void updateTest() { User user = new User(); user.setAge(20); user.setEmail("temporary.com"); QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.gt("age", 20) .like("name", "a") .or() .isNull("email"); // UPDATE user SET age=?, email=? WHERE is_deleted=0 AND (age > ? AND name LIKE ? OR email IS NULL) int result = mapper.update(user, queryWrapper); System.out.println("修改的行数为" + result); } 1.2 条件优先级使用queryWrapper组装复杂条件的时候,存在一个且或条件的优先级问题,也就是说在实现多条件拼接的时候且或条件该如何拼接到一起,接下来就挑取两个例子来了解一下 // (年龄大于20并且用户名中包含有a) 或 邮箱为null // UPDATE user SET age=?, email=? WHERE is_deleted=0 AND (age > ? AND name LIKE ? OR email IS NULL) queryWrapper.gt("age", 20) .like("name", "a") .or() .isNull("email"); // 用户名中包含有a 且 (年龄大于18或邮箱为null) // UPDATE user SET age=?, email=? WHERE is_deleted=0 AND (name LIKE ? AND (age > ? OR email IS NULL)) queryWrapper.like("name", "a") .and(i -> i.gt("age", 18).or().isNull("email"));总结一下:Lambda表达式中的条件会被当做一个整体优先执行,如果不括起来影响结果的话就需要使用Lambda表达式的写法,具体的使用要根据业务SQL语句来定 1.3 实现子查询 @Test public void sonSelectTest() { QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.inSql("id", "select id from user where id |
CopyRight 2018-2019 实验室设备网 版权所有 |