mybatis 您所在的位置:网站首页 wrapper不等于查询 mybatis

mybatis

2024-02-26 07:55| 来源: 网络整理| 查看: 265

特此说明:

本文主要是自己学习记录和查询

本文主要内容,参考了如下文章,感谢作者的不吝赐教。

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 实验室设备网 版权所有