首页 > 其他分享 >mybatisplus常用写法

mybatisplus常用写法

时间:2024-04-18 10:44:06浏览次数:24  
标签:QueryWrapper 常用 mybatisplus wrapper role user new 写法 id

一、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

标签:QueryWrapper,常用,mybatisplus,wrapper,role,user,new,写法,id
From: https://www.cnblogs.com/3cock/p/18142985

相关文章

  • 工作中常用到的Linux命令
    思维导航系统,用户信息操作相关命令查看系统发行版本权限控制命令运行控制启动命令目录、文件、文本管理相关命令查看历史命令参考文章系统,用户信息操作相关命令查看主机ip地址ifconfig获取用户信息id修改用户密码passwd查看链接用户who创建新用户账号use......
  • Linux常用命令知识点总结
    目录目录目录基础指令Linux命令基本格式文件操作文件格式文件权限创建文件查看文件删除文件移动文件复制文件编辑文件查找文件查找命令路径vim文本编辑器一般指令模式(commandmode)编辑模式(insertmode)指令列命令模式command-linemode目录操作打印路径查看目录切换目录创建目......
  • mysql问题排查常用脚本
    查询出执行时间较长的进程select*frominformation_schema.processlistwherecommand!='Sleep'andtime>5*60orderbytimedesc;select*frominformation_schema.processlistwhereCommand!='Sleep'orderbyTimedesc;查看进程showfullprocess......
  • mybatisplus
    官网啥都有https://baomidou.com/1.引入依赖<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version></dependency>2.定义Mapp......
  • React 添加常用通用框架
    目录前言React第三方库使用ant-design安装推荐使用react-icons:icon库安装简单使用react-router:React路由添加TailwindCSS:html通用组件TailwindCSS安装yesicon中文Icon网daisyuiEchart+echarts-for-react总结前言今天来写一个简单的后台管理页面,没有后端接口,都是模拟的数......
  • 常用conda命令
    CONDA常用命令管理自身1.查看conda版本condacreate-nenv_namepython=3.8获取版本号conda-Vconda--version获取环境相关的命令的帮助condaenv-h关于环境1.创建虚拟环境condacreate-nenvironment_name2.激活虚拟环境condaactivateenv_name3.退出......
  • day14_我的Java学习笔记 (常用API、Lambda、常见算法)
    1.常用API1.1Date类【案例】:计算出当前时间往后走1小时121秒之后的时间是多少。1.2SimpleDateFormat【练习】:秒杀活动1.3Calendar2.JDK8新增日期类2.1概述、LocalTime/LocalDate/LocalDateTime2.2Ins......
  • mybatisplus
    mybatisplus如何实现获取信息通过扫描实体类并通过反射获取实体类信息作为数据库表信息约定:类名、变量名驼峰转下划线作为表名id字段默认为主键常用注解@TableName,@TableId,@TableField@TableField使用场景:成员变量为boolean并且名称为is开头,转化时会去掉is......
  • Java 常用笔记
    问题1org.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'jobConfParser'definedinclasspathresource[com/cxytiandi/elasticjob/autoconfigure/JobParserAutoConfiguration.class]:Initializationofbeanfailed;n......
  • LocalDateTime中的常用方法
    LocalDateTime类中的一些常用方法,这些方法用于处理日期和时间信息:获取当前时间:LocalDateTime.now()返回当前系统时间对应的LocalDateTime对象,包括日期和时间部分。构造实例:LocalDateTime.of(intyear,intmonth,intdayOfMonth,inthour,intminute,intsecond,......