跳到主要内容

wrapper条件构造器

仅演示部分方法,全部方法请查阅Mybatis-Plus官网

image-20231031212652407

  • Wrapper : 条件构造抽象类,最顶端父类

    • AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件

      • QueryWrapper : 查询条件封装

      • UpdateWrapper : Update 条件封装

      • AbstractLambdaWrapper : 使用Lambda 语法

        • LambdaQueryWrapper :用于Lambda语法使用的查询Wrapper

        • LambdaUpdateWrapper : Lambda 更新封装Wrapper

QueryWrapper(不推荐)

数据库的字段名需要自己填写,容易写错,以下为一个示例,后续采用LambdaQueryWrapper演示

eq

  • 等于 =
  • 例: eq("name", "老王")--->name = '老王'

查询数据库字段name,名字为Tom的用户

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "Tom");
User user = userMapper.selectOne(queryWrapper);
System.out.println("user = " + user);

LambdaQueryWrapper(推荐)

eq

  • 等于 =
  • 例: eq("name", "老王")--->name = '老王'

查询数据库字段name,名字为Tom的用户

LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getName, "Tom");
User user = userMapper.selectOne(queryWrapper);
System.out.println("user = " + user);

gt

  • 大于 >
  • 例: gt("age", 18)--->age > 18

查询年龄大于20的用户

LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.gt(User::getAge, 20);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);

ge

  • 大于等于 >=
  • 例: ge("age", 18)--->age >= 18

查询年龄大于等于22的用户

LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.ge(User::getAge, 22);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);

lt

  • 小于 <
  • 例: lt("age", 18)--->age < 18

查询年龄小于22的用户

LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.lt(User::getAge, 22);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);

le

  • 小于等于 <=
  • 例: le("age", 18)--->age <= 18

查询年龄小于等于22的用户

LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.le(User::getAge, 22);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);

between

  • BETWEEN 值1 AND 值2
  • 例: between("age", 18, 30)--->age between 18 and 30

查询年龄在18到30之间的用户

LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.between(User::getAge, 18,30);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);

like

  • LIKE '%值%'
  • 例: like("name", "王")--->name like '%王%'

查询名字含有“王”字的用户

LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(User::getName, "王");
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);

orderByDesc

  • 排序:ORDER BY 字段, ... DESC
  • 例: orderByDesc("age")--->order by age DESC

按年龄降序排序

LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.orderByDesc(User::getAge);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);

组合使用

按年龄降序查询用户,如果年龄相同则按id升序排列

LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper
.orderByDesc(User::getAge)
.orderByAsc(User::getId);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);

查询用户名包含a,年龄在20到30之间,并且邮箱不为null的用户信息

LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper
.like(User::getName,"a")
.between(User::getAge,20,30)
.isNull(User::getEmail);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);

UpdateWrapper(不推荐)

set

  • 例: set("name", "老李头")
  • 例: set("name", "")--->数据库字段值变为空字符串
  • 例: set("name", null)--->数据库字段值变为null

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

提示

复杂sql语句不建议使用条件构造器,推荐使用xml

 UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper
.set("age", 18)
.set("email", "aaa@123.com")
.like("name", "a")
.and(i -> i
.gt("age", 20)
.or()
.isNull("email")
);
int update = userMapper.update(updateWrapper);
System.out.println("update = " + update);

LambdaUpdateWrapper(推荐)

LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper
.set(User::getAge, 18)
.set(User::getEmail, "aaa@123.com")
.like(User::getName, "a")
.and(i -> i
.gt(User::getAge, 20)
.or()
.isNull(User::getEmail)
);
int update = userMapper.update(updateWrapper);
System.out.println("update = " + update);