mybatisplus常用写法

一、QueryWrapper和LambdaQueryWrapper的区别

  1. 写法和表达方式不同:
    QueryWrapper:使用传统的字符串形式构建查询条件,通过支持链式调用的方式,可以方便地拼接多个查询条件。
    LambdaQueryWrapper:使用 Lambda 表达式构建查询条件,可以通过实体类的属性和方法来安全地编写查询条件,减少犯错和代码冗余。
  2. 类型安全和编译时检查:
    QueryWrapper:由于是字符串形式的条件拼接,编译时无法检查其中的错误和类型不匹配问题,所以需要开发人员自行保证查询条件的正确性。
    LambdaQueryWrapper:基于 Lambda 表达式构建查询条件,可以在编译阶段进行类型检查,编译器可以帮助检测属性名等错误,减少运行时出错的可能性。
  3. 支持实体属性的引用方式:
    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
posted @ 2024-04-18 10:37  三鸡  阅读(123)  评论(0编辑  收藏  举报