MybatisPlus——分页实战优化

mybatisplus分页查询最佳实践,包括PageQuery和PageDTO转换及代码复用
摘要由CSDN通过智能技术生成

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);
    }

 

 

  • 12
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

L.2626

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值