MyBatis-Plus 条件构造器
MyBatis-Plus 通过 QueryWrapper 对象让用户自由的构建 SQL 条件,简单便捷,没有额外的负担,能够有效提高开发效率。开发中大多数使用 LambdaQueryWrapper 对象。下图为 Wrapper 的子类关系:
条件构造器的参数说明如下:
查询方式 | 说明 |
---|---|
or | “或”条件语句 |
and | “且”条件语句 |
like | 模糊查询 like |
notLike | 模糊查询 not like |
exists | exists 条件语句 |
notExists | not exists 条件语句 |
isNull | is null 值查询 |
isNotNull | is not null 值查询 |
in | in 查询 |
notIn | not in 查询 |
groupBy | 分组查询 |
orderBy | 排序查询 |
orderByAsc | 升序 |
orderByDesc | 降序 |
having | 分组后筛选 |
eq | 等于“=” |
ne | 不等于“<>” |
between | between 条件语句 |
gt | 大于“>” |
ge | 大于等于“>=” |
lt | 小于“<” |
le | 小于等于“<=” |
用法如下:
- QueryWrapper
@Test
public void testQueryWrapper(){
//新建条件构造器
QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("gender","f").gt("age", "25").orderByDesc("id");
//调用查询方法
List<Student> students = studentMapper.selectList(queryWrapper);
students.forEach(System.out::println);
}
因为构造时使用的是数据库字段,不是 Java 属性。这样对于开发不友好,但是使用 QueryWrapper 也能使用 Lambda表达式的方式,改进如下:
@Test
public void testQueryWrapper(){
//新建条件构造器
QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(Student::getGender,"f").gt(Student::getAge, "25").orderByDesc(Student::getId);
//调用查询方法
List<Student> students = studentMapper.selectList(queryWrapper);
students.forEach(System.out::println);
}
- LambdaQueryWrapper
开发中一般使用 LambdaQueryWrapper 构造器,开发中尽量少用或者不用具体值,而是用封装实体或者常量来表示,最终版如下:
@Test
public void testLambdaQueryWrapper(){
//新建 Lambda 条件构造器
LambdaQueryWrapper<Student> queryWrapper = new LambdaQueryWrapper<>();
//新建对比的实体
Student student = Student.builder().id(7).name("胡亥").age(23).gender("m").build();
//自定义查询条件
queryWrapper.lt(Student::getAge, student.getAge()).orderByDesc(Student::getId);
//调用查询含条件构造器的查询方法
List<Student> students = studentMapper.selectList(queryWrapper);
//遍历
students.forEach(System.out::println);
}