首先我们来看看若依plus中为我们提供的分页插件:
分页插件在公共模块中,该类中定义了分页中需要的实体如:
/**
* 分页大小
*/
private Integer pageSize;
/**
* 当前页数
*/
private Integer pageNum;
/**
* 排序列
*/
private String orderByColumn;
/**
* 排序的方向desc或者asc
*/
private String isAsc;
/**
* 当前记录起始索引 默认值
*/
public static final int DEFAULT_PAGE_NUM = 1;
/**
* 每页显示记录数 默认值 默认查全部
*/
public static final int DEFAULT_PAGE_SIZE = Integer.MAX_VALUE;
小编这里采用Apifox为大家演示前端传入的参数:
通过前端传入pageSize和pageNum我们则利用这些参数来作为条件进行分页。
若依plus中为我们提供了MP的分页查询方法:
/**
* 分页查询VO
*/
default <C, P extends IPage<C>> P selectVoPage(IPage<T> page, Wrapper<T> wrapper, Class<C> voClass) {
IPage<T> pageData = this.selectPage(page, wrapper);
IPage<C> voPage = new Page<>(pageData.getCurrent(), pageData.getSize(), pageData.getTotal());
if (CollUtil.isEmpty(pageData.getRecords())) {
return (P) voPage;
}
voPage.setRecords(BeanCopyUtils.copyList(pageData.getRecords(), voClass));
return (P) voPage;
}
在不需要关联查询的情况下使用MP提供的方法进行分页查询,在效率不变的情况下可以让我们代码更简洁。
如果是复杂sql查询,使用我们的MPJ为我们提供的关联查询会更加灵活,下面小编为大家提供自己使用的案例:
//构建MPJ分页
IPage<QyInformationVo> page = baseMapper.selectJoinPage(new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()),QyInformationVo.class,
new MPJLambdaWrapper<QyInformation>()
.select(QyInformation::getId)
.select(QyInformation::getUserId)
.selectAll(QyInformation.class)
//加装条件,判断业务条件小于6
.lt(QyInformation::getReplyStatus,"6")
//添加查询条件
.like(StringUtils.isNotBlank(qyInformation.getTitle()), QyInformation::getTitle, qyInformation.getTitle())
.like(StringUtils.isNotBlank(qyInformation.getBusinessType()), QyInformation::getBusinessType, qyInformation.getBusinessType())
.like(StringUtils.isNotBlank(qyInformation.getBelongArea()), QyInformation::getBelongArea, qyInformation.getBelongArea())
.likeRight(StringUtils.isNotBlank(qyInformation.getAreaCode()), QyInformation::getAreaCode, qyInformation.getAreaCode())
.eq(StringUtils.isNotBlank(qyInformation.getReplyStatus()), QyInformation::getReplyStatus, qyInformation.getReplyStatus())
.like(StringUtils.isNotBlank(qyInformation.getUserName()), SysUser::getUserName, qyInformation.getUserName())
.like(StringUtils.isNotBlank(qyInformation.getEnterpriseName()), SysUser::getEntName, qyInformation.getEnterpriseName())
//将右连接查询出的数据赋值给information对应的实体参数
.selectAs(SysUser::getUserName,"userName")
.selectAs(SysUser::getEntName,"enterpriseName")
.selectAs(SysUser::getNickName,"nickName")
.leftJoin(SysUser.class,SysUser::getUserId,QyInformation::getUserId)
//根据业务的创建时间进行倒序
.orderByDesc(QyInformation::getCreateTime)
);
//将返回的分页查询重新build
return TableDataInfo.build(page);
查询条件利用lambda表达式来构建条件,like和eq前端可用于条件查询,而lt可以对参数实体进行条件约束,更为灵活的应对前端所需求的查询展示,同时selectAs能将关联查询出的实体对象赋值给主对象对应的参数。
MPJ分页查询返回的对象是IPage,我们还需要利用若依plus提供的表格分页数据对象来进行重构:
将返回的参数重定义为TableDataInfo对应的参数:
* 总记录数
*/
private long total;
/**
* 列表数据
*/
private List<T> rows;
/**
* 消息状态码
*/
private int code;
/**
* 消息内容
*/
private String msg;
如果直接返回IPage对象那么返回的参数是:
/**
* 分页记录列表
*
* @return 分页对象记录列表
*/
List<T> getRecords();
/**
* 设置分页记录列表
*/
IPage<T> setRecords(List<T> records);
/**
* 当前满足条件总行数
*
* @return 总条数
*/
long getTotal();
/**
* 设置当前满足条件总行数
*/
IPage<T> setTotal(long total);
/**
* 获取每页显示条数
*
* @return 每页显示条数
*/
long getSize();
/**
* 设置每页显示条数
*/
IPage<T> setSize(long size);
/**
* 当前页
*
* @return 当前页
*/
long getCurrent();
/**
* 设置当前页
*/
IPage<T> setCurrent(long current); /**
* 分页记录列表
*
* @return 分页对象记录列表
*/
List<T> getRecords();
/**
* 设置分页记录列表
*/
IPage<T> setRecords(List<T> records);
/**
* 当前满足条件总行数
*
* @return 总条数
*/
long getTotal();
/**
* 设置当前满足条件总行数
*/
IPage<T> setTotal(long total);
/**
* 获取每页显示条数
*
* @return 每页显示条数
*/
long getSize();
/**
* 设置每页显示条数
*/
IPage<T> setSize(long size);
/**
* 当前页
*
* @return 当前页
*/
long getCurrent();
/**
* 设置当前页
*/
IPage<T> setCurrent(long current);
/**
* 老分页插件不支持
* <p>
* MappedStatement 的 id
*
* @return id
* @since 3.4.0 @2020-06-19
*/
default String countId() {
return null;
}
MyBatis-Plus官网为我们提供了每个参数的详细阐述:
最后也希望小编的案例能够为大家带来帮助和进步,与大家一起共同进步,同时也希望大家多多支持小编,给小编点点赞,感谢大家的支持!!