MyBatis-Plus条件构造器详解及应用
MyBatis-Plus 是一个 MyBatis 的增强工具
- QueryWrapper:构建查询的工具
- UpdateWrapper:用于构造更新条件
- LambdaQueryWrapper:这是一个基于 Lambda 表达式的查询条件构造器,调用使用的实体类属性的get方法,使用比较灵活,避免了硬编码
- LambdaUpdateWrapper:基于 Lambda 表达式的更新条件构造器
这篇文章针对QueryWWrapper进行应用
QueryWrapper
//通过实例化进行使用,无条件查询传递null即可QueryWrapper<查询的实体类名>queryWrapper=newQueryWrapper<>();排序
//升序queryWrapper.orderByAsc("列名");//降序queryWrapper.orderByDesc("列名");//排序 queryWrapper.orderBy(boolean condition, boolean isAsc, R... columns)//condition 是否使用该排序条件//isAsc 升序还是降序,升序true 降序false//columns 按照哪一列进行排序 也可以是多个列queryWrapper.orderBy(true,true,"列名1","列名2");模糊查询
//likequeryWrapper.like("列名","模糊查询内容");//not likequeryWrapper.notLike("列名","模糊查询内容");//右模糊queryWrapper.likeLeft("列名","模糊查询内容");//左模糊queryWrapper.likeRight("列名","模糊查询内容");//非右[左]模糊匹配条件queryWrapper.notLikeLeft[notLikeRight]("列名","模糊查询内容");等值查询
//列名等于(eq)/不等于(ne)/大于(gt)/大于等于(ge)/小于(lt)/小于等于(le)值queryWrapper.eq("列名",值);//区间查询 betweenqueryWrapper.between("列名",起始值,结束值);//notBetweenqueryWrapper.notBetween("列名",起始值,结束值);集合匹配查询
//in -- 在指定集合中queryWrapper.in("列名",值1,值2,值3);//notIn -- 不在指定集合中queryWrapper.notIn("列名",值1,值2,值3);指定查询列
queryWrapper.select("列名1","列名2",...);子查询
//exists(String existsSql) sql语句子查询queryWrapper.exists("select 字段 from 表名 where 条件")...其他查询条件;//notExistsqueryWrapper.notExists("select 字段 from 表名 where 条件");或、与
//一种连接方式,将前后条件连接到一起 or/andqueryWrapper.查询条件1.or[and]().查询条件2;分组查询
//groupBy 进行分组queryWrapper.groupBy("分组字段名");//select需要查询的字段queryWrapper.select("字段1, count(1) 统计总数, avg(字段) 平均值,......");//分组后的筛选条件queryWrapper.having("条件")分页查询
importcom.baomidou.mybatisplus.core.metadata.IPage;//通过IPage进行分页实现QueryWrapper<实体类>wrapper=newQueryWrapper<>();wrapper.orderByAsc("排序字段名");//分页条件IPage<实体类>page=newPage<>();page.setCurrent(1);//当前页page.setSize(5);//每页条数//查分页IPage<实体类>pageResult=employeeMapper.selectPage(page,wrapper);//当前页数据List<实体类>records=pageResult.getRecords();注意:实现分页需要额外添加一个bean,可以直接放在启动类中,也可以单独存在文件中
//分页配置@BeanpublicMybatisPlusInterceptormybatisPlusInterceptor(){MybatisPlusInterceptorinterceptor=newMybatisPlusInterceptor();// 分页插件,指定数据库类型PaginationInnerInterceptorpaginationInnerInterceptor=newPaginationInnerInterceptor(DbType.MYSQL);// 常用配置项// false:超出最大页返回空;true:回到第一页paginationInnerInterceptor.setOverflow(false);// 单页最大条数,防止一次性查大量数据paginationInnerInterceptor.setMaxLimit(1000L);// join优化,针对 COUNT 查询的 JOIN 优化策略,提升性能paginationInnerInterceptor.setOptimizeJoin(true);interceptor.addInnerInterceptor(paginationInnerInterceptor);returninterceptor;}