MybatisPlus——分页实战优化
优化示例:
在PageQuery中定义方法,将PageQuery对象转为MyBatisPlus中的Page对象
在PageDTO中定义方法,将MyBatisPlus中的Page结果转为PageDTO结果。
优化一:将图中可能会重复出现的代码进行封装
package com.example.mybatisplus03.query;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "分页查询实体")
public class PageQuery {
// 页数
@ApiModelProperty(value = "页码", example = "1")
private Integer pageNum;
// 每页条数
@ApiModelProperty(value = "每页条数", example = "10")
private Integer pageSize;
// 排序字段
@ApiModelProperty(value = "排序字段", example = "id")
private String orderBy;
// 排序方式,是否升序
@ApiModelProperty(value = "排序方式,是否升序", example = "true")
private Boolean isAsc;
public <T> Page<T> toMpPage(OrderItem... items){
// 分页条件
Page<T> page =Page.of(pageNum, pageSize);
// 2.排序条件
if(StringUtils.isNotBlank(orderBy)){
// 不为空
page.addOrder(new OrderItem().setColumn(orderBy).setAsc(isAsc));
}else if(items != null) {
//为空,默认排序
page.addOrder(items);
}
return page;
}
}
优化二:
public static <Po,Vo> PageDTO<Vo> of(Page<Po> p, Class<Vo> clazz) {
PageDTO<Vo> dto = new PageDTO<>();
// 1.总条数
dto.setTotal(p.getTotal());
// 2.总页数
dto.setPages(p.getPages());
// 当前页数据
List<Po> records = p.getRecords();
if (CollectionUtils.isEmpty(records)) {
dto.setList(Collections.emptyList());
return dto;
}
//4.拷贝user的Vo
dto.setList(BeanUtil.copyToList(records, clazz));
// 返回
return dto;
}
优化完:
@Override
public PageDTO<User> queryUsersPage(UserQuery query){
String name = query.getName();
Integer status = query.getstatus();
//1.构建分页条件
Page<User> page = query.toMpPageDefaultSortByUpdateTime();
//2.分页查询
Page<User>p=lambdaQuery()
.like( condition: name != null.User::getUsername, name)
.eq( condition: status != null,User::getStatus,status)
.page(page);
//3.封装Vo结果
return PageDT0.of(p,User.class);
}