一、创建QueryWrapper对象
QueryWrapper是Mybatis Plus提供的一个查询条件构造器,通过它可以灵活的构造相应的查询条件来实现复杂查询的功能。创建一个QueryWrapper的方式很简单,只需要调用静态方法QueryWrapper()即可:
QueryWrapperqueryWrapper = new QueryWrapper<>();
其中,User是要查询的实体类,通过泛型的方式来指定。创建好QueryWrapper对象之后,就可以开始按照自己的需求添加各种查询条件了。
二、添加查询条件
QueryWrapper提供了丰富的方法来添加各种查询条件,这里介绍几种常用的方法。
1、eq方法
eq方法用来添加等于条件,例如:
queryWrapper.eq("name", "Jack");
表示查询name等于"Jack"的记录。
2、like方法
like方法用来添加模糊查询条件,例如:
queryWrapper.like("name", "Jac");
表示查询name包含"Jac"的记录。
3、between方法
between方法用来添加区间查询条件,例如:
queryWrapper.between("age", 18, 30);
表示查询age在18到30之间的记录。
4、in方法
in方法用来添加in查询条件,例如:
queryWrapper.in("id", 1, 3, 5);
表示查询id为1或3或5的记录。
5、isNull和isNotNull方法
isNull和isNotNull方法用来添加空值查询条件,例如:
queryWrapper.isNull("email");
表示查询email为空的记录。
6、orderBy方法
orderBy方法用来添加排序条件,例如:
queryWrapper.orderBy(true, true, "age");
表示按照age升序排序。
三、链式查询
Mybatis Plus的QueryWrapper支持链式查询,也就是在一个QueryWrapper对象上不断添加多个查询条件,例如:
queryWrapper.eq("name", "Jack") .like("email", "@test.com") .between("age", 18, 30) .orderBy(true, true, "age");
表示查询name为"Jack",email包含"@test.com",age在18到30之间的记录,并且按照age升序排序。
四、Lambda查询
Mybatis Plus还提供了一种更加简洁的查询方式,即通过Lambda表达式来构造查询条件。Lambda表达式可以用来指定查询实体中某些字段的值,例如:
LambdaQueryWrapperlambdaQueryWrapper = new LambdaQueryWrapper () .eq(User::getName, "Jack") .like(User::getEmail, "@test.com") .between(User::getAge, 18, 30) .orderBy(true, true, User::getAge);
表示查询name为"Jack",email包含"@test.com",age在18到30之间的记录,并且按照age升序排序。通过Lambda表达式,我们可以直接指定实体类中的属性,不需要再通过字符串来指定字段名,避免了因为拼写错误等问题而导致的查询失败。
五、高级查询
1、查询中使用子查询
在QueryWrapper中也可以使用子查询来实现更加复杂的查询。例如,我们可以通过下面的方式来查询user_id在一个子查询中查出的记录:
QueryWrapperqueryWrapper = new QueryWrapper<>(); queryWrapper.inSql("user_id", "select id from user where age < 20");
其中,inSql方法用来添加一个IN语句,需要传入一个子查询的SQL语句。
2、查询结果映射到Dto
有时候,我们想要将查询结果映射到一个自定义的Dto对象中,可以通过以下方式实现:
QueryWrapperqueryWrapper = new QueryWrapper<>(); queryWrapper.lambda() .eq(User::getName, "Jack") .select(User::getName, User::getEmail, User::getAge) .last("limit 1"); List userDtoList = userMapper.selectObjs(queryWrapper).stream() .map(obj -> BeanUtil.toBean(obj, UserDto.class)) .collect(Collectors.toList());
其中,select方法用来指定需要查询的字段,last方法用来添加where语句之后的部分,这里是添加limit 1。最后通过selectObjs方法查询出结果后,将每一个结果对象转换成Dto对象。
六、总结
至此,我们对Mybatis Plus中的QueryWrapper做了一个全面的介绍,包括创建对象、添加查询条件、链式查询、Lambda查询、高级查询等方面。QueryWrapper可以帮助我们灵活构造相应的查询条件,在查询数据时提高我们的效率和准确性。