一、QueryWrapper和LambdaQueryWrapper的区别
- 写法和表达方式不同:
QueryWrapper:使用传统的字符串形式构建查询条件,通过支持链式调用的方式,可以方便地拼接多个查询条件。
LambdaQueryWrapper:使用 Lambda 表达式构建查询条件,可以通过实体类的属性和方法来安全地编写查询条件,减少犯错和代码冗余。 - 类型安全和编译时检查:
QueryWrapper:由于是字符串形式的条件拼接,编译时无法检查其中的错误和类型不匹配问题,所以需要开发人员自行保证查询条件的正确性。
LambdaQueryWrapper:基于 Lambda 表达式构建查询条件,可以在编译阶段进行类型检查,编译器可以帮助检测属性名等错误,减少运行时出错的可能性。 - 支持实体属性的引用方式:
QueryWrapper:需要手动通过字符串形式指定实体类的属性名。
LambdaQueryWrapper:可以直接使用实体类的属性名,减少手写字符串的风险和不便。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.ge("age", 18).eq("gender", "女性");
List<User> userList = userMapper.selectList(queryWrapper);
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.ge(User::getAge, 18).eq(User::getGender, "女性");
List<User> userList = userMapper.selectList(lambdaQueryWrapper);
二、
1、多表关联查询
// User 和 Role 是多对多关系,使用中间表 user_role
public List<User> getUserListByRoleId(Integer roleId) {
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("user.*").distinct()
.from("user")
.leftJoin("user_role").on("user.id=user_role.user_id")
.eq("user_role.role_id", roleId);
return userMapper.selectList(wrapper);
}
2、多表关联查询并排序
public List<User> getUserListOrderByRoleName() {
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("user.*").distinct()
.from("user")
.leftJoin("user_role").on("user.id=user_role.user_id")
.leftJoin("role").on("user_role.role_id=role.id")
.orderByAsc("role.name");
return userMapper.selectList(wrapper);
}
3、多表关联查询并分页
public IPage<User> getUserListByPage(Integer roleId, Integer pageNum, Integer pageSize) {
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("user.*").distinct()
.from("user")
.leftJoin("user_role").on("user.id=user_role.user_id")
.eq("user_role.role_id", roleId);
Page<User> page = new Page<>(pageNum, pageSize);
return userMapper.selectPage(page, wrapper);
}
4、多表关联查询并统计结果
public Integer getUserCountByRoleId(Integer roleId) {
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("count(distinct user.id) as count")
.from("user")
.leftJoin("user_role").on("user.id=user_role.user_id")
.eq("user_role.role_id", roleId);
Map<String, Object> map = userMapper.selectMaps(wrapper).get(0);
return Integer.parseInt(map.get("count
标签:QueryWrapper,常用,mybatisplus,wrapper,role,user,new,写法,id
From: https://www.cnblogs.com/3cock/p/18142985