PageResult类的使用

前言:

  • 一般返回全部东西的话就要用到page页面,
  • 然后一般返回普通的page(import com.baomidou.mybatisplus.extension.plugins.pagination.Page
  • 其中要新建一个页面的到页面的大小,页面页数

PageResult类:

package org.cuit.epoch.util.result;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

/**
 * @author Pymjl
 * @date 2022/1/21 22:00
 */

public class PageResult<T> implements Iterable<T>, Serializable {
    private static final long serialVersionUID = -3720998571176536865L;

    /**
     * 数据条数
     */
    private List<T> records = new ArrayList<>();

    /**
     * 一共有多少条数据
     */
    private long totalElements;

    /**
     * 当前页数
     */
    private long currentPage;

    /**
     * 一页数据最多有多少条数据
     */
    private long pageSize;

    /**
     * 一共有多少页
     */
    private long totalPages;

    /**
     * 当前页数有多少条数据
     */
    private int numberOfElements;

    public PageResult() {
    }

    /**
     * 构造方法,只用把原来的page类放进来即可
     *
     * @param page 查出来的分页对象
     */
    public PageResult(Page<T> page) {
        this.records = page.getRecords();
        this.totalElements = page.getTotal();
        this.currentPage = page.getCurrent();
        this.pageSize = page.getSize();
        this.numberOfElements = page.getRecords().size();
        this.totalPages = page.getPages();
    }

    /**
     * 是否有前一页
     *
     * @return boolean
     */
    public boolean hasPrevious() {
        return getCurrentPage() > 0;
    }

    /**
     * 是否有下一页
     *
     * @return boolean
     */
    public boolean hasNext() {
        return getCurrentPage() + 1 < getTotalPages();
    }

    /**
     * 获取总的页数
     *
     * @return long
     */
    public long getTotalPages() {
        return this.totalPages;
    }


    /**
     * 获取当前页的数据
     *
     * @return List<T>
     */
    public List<T> getRecords() {
        return Collections.unmodifiableList(records);
    }

    /**
     * 设置内容
     *
     * @param records 内容
     */
    public void setRecords(List<T> records) {
        this.records = records;
    }

    /**
     * 是否有内容
     *
     * @return boolean
     */
    public boolean hasRecords() {
        return getNumberOfElements() > 0;
    }

    /**
     * 获取单页大小
     */
    public Long getPageSize() {
        return pageSize;
    }

    /**
     * 设置单页大小
     */
    public void setPageSize(Long pageSize) {
        this.pageSize = pageSize;
    }

    /**
     * 获取全部元素数目
     */
    public long getTotalElements() {
        return totalElements;
    }

    /**
     * 设置全部元素数目
     */
    public void setTotalElements(long totalElements) {
        this.totalElements = totalElements;
    }


    /**
     * 获取当前页号
     */
    public Long getCurrentPage() {
        return currentPage;
    }

    /**
     * 设置当前页号
     */
    public void setCurrentPage(Long currentPage) {
        this.currentPage = currentPage;
    }


    /**
     * 获取单页元素数目
     */
    public int getNumberOfElements() {
        return numberOfElements;
    }

    /**
     * 设置单页元素数目
     */
    public void setNumberOfElements(int numberOfElements) {
        this.numberOfElements = numberOfElements;
    }


    /**
     * 迭代器
     */
    @Override
    public Iterator<T> iterator() {
        return getRecords().iterator();
    }
}

PrizeService:

public interface PrizeService extends IService<Prize> {
    Page<Prize> getPrizeByEverything(Integer currentPage, Integer pageSize, PrizeUpdateDTO PrizeUpdateDTO);
}

PrizeServiceImpl:

/**
 * @Description:
 * @Author Ladidol
 * @Date: 2022/3/17 21:03
 * @Version 1.0
 */
@Service
public class PrizeServiceImpl extends ServiceImpl<PrizeMapper, Prize> implements PrizeService {

    @Resource
    PrizeMapper prizeMapper;

    /*
    通过奖项的一些属性筛选,查询,通过分页返回
    */
    @Override
    public Page<Prize> getPrizeByEverything(Integer currentPage, Integer pageSize, PrizeUpdateDTO prizeUpdateDTO) {
        LambdaQueryWrapper<Prize> queryWrapper = new LambdaQueryWrapper<>();
        System.out.println("需要查询的班级为:" + prizeUpdateDTO.getClbum());
        queryWrapper
                .like(Strings.isNotBlank(prizeUpdateDTO.getPrizeName()),Prize::getPrizeName,prizeUpdateDTO.getPrizeName())
                .like(Strings.isNotBlank(prizeUpdateDTO.getPrizeWinner()),Prize::getPrizeWinner,prizeUpdateDTO.getPrizeWinner())
                .like(Strings.isNotBlank(prizeUpdateDTO.getClbum()),Prize::getClbum,prizeUpdateDTO.getClbum())
                .like(Strings.isNotBlank(prizeUpdateDTO.getGrade()),Prize::getGrade,prizeUpdateDTO.getGrade())
                .like(Strings.isNotBlank(prizeUpdateDTO.getProfession()),Prize::getProfession,prizeUpdateDTO.getProfession())
                .like(Strings.isNotBlank(prizeUpdateDTO.getPrizeName()),Prize::getPrizeName,prizeUpdateDTO.getPrizeName());
        if (prizeUpdateDTO.getPrizeTime() != null){
            queryWrapper.like(Prize::getPrizeTime,prizeUpdateDTO.getPrizeTime());
        }

        Page<Prize> prizePage = new Page<>(currentPage, pageSize);
        prizeMapper.selectPage(prizePage,queryWrapper);
        return prizePage;
    }

}

PrizeController:

/**
 * @Description: todo 异常拦截
 * @Author Ladidol
 * @Date: 2022/3/17 20:51
 * @Version 1.0
 */

@RestController
@RequestMapping("/prizes")
public class PrizeController {

    @Resource
    PrizeService prizeService


    /**
     * @Description: 通过分类筛选,你想要怎么筛选都可以,你直接传一个prize对象给我就行
     * 这里的prizeUpdateDTO没有将json中的class识别转换成clbum,一个小bug,是因为,没有加@requestBody这个注解,这里是直接从require参数中取值,不是json中取值,@Json就没有很大的作用,可以新建一个类
     *
     * @Author: ladidol
     * @Date: 2022/3/18 11:28
     * @Param:
     * @Return:
     */
    @GetMapping("/searchByEverything")
    public Result<PageResult<Prize>> getPrizesByEverything(@RequestParam("currentPage")Integer currentPage, @RequestParam("pageSize")Integer pageSize, PrizeUpdateDTO prizeUpdateDTO){
        return R.success(new PageResult<>(prizeService.getPrizeByEverything(currentPage, pageSize, prizeUpdateDTO)));
    }

}

PrizeUpdateDTO:

/**
 * @Description:
 * @Author Ladidol
 * @Date: 2022/3/17 21:15
 * @Version 1.0
 */
@Data
public class PrizeUpdateDTO {

    @NotNull(message = "奖项id不能为空")
    private Long id;

    @NotBlank(message = "奖项者不能为空")
    private String prizeWinner;

    @NotBlank(message = "奖项名字不能为空")
    private String prizeName;

    @NotNull(message = "奖项时间不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date prizeTime;

    @NotBlank(message = "奖项文件不能为空")
    private String url;

    @NotBlank(message = "专业不能为空")
    private String profession;

    @NotBlank(message = "年级不能为空")
    private String grade;

    @NotBlank(message = "班级不能为空")
    @JsonProperty("class")
    private String clbum;//班级

}

apifox上查询结果:

例一:

途中是对奖项名字prizeName带有"奖项"和奖项专业profession带有计算机的进行的筛选返回

image-20220318124622466

image-20220318124600563

{
    "result": {
        "records": [
            {
                "id": 12,
                "prizeWinner": "小小1",
                "prizeName": "奖项11",
                "prizeTime": "2022-03-17 22:16:35",
                "url": "http://1.15.245.21:8888/group1/M00/00/00/rBEAA2IzIqiAIYUnAACQbY6JA7I103.jpg",
                "profession": "计算机",
                "grade": "20级",
                "createTime": "2022-03-18 12:44:11",
                "updateTime": "2022-03-18 12:44:11",
                "class": "201"
            },
            {
                "id": 13,
                "prizeWinner": "小小2",
                "prizeName": "奖项11",
                "prizeTime": "2022-03-17 22:16:35",
                "url": "http://1.15.245.21:8888/group1/M00/00/00/rBEAA2IzIqiAIYUnAACQbY6JA7I103.jpg",
                "profession": "计算机",
                "grade": "20级",
                "createTime": "2022-03-18 12:44:17",
                "updateTime": "2022-03-18 12:44:17",
                "class": "201"
            },
            {
                "id": 14,
                "prizeWinner": "小小3",
                "prizeName": "奖项11",
                "prizeTime": "2022-03-17 22:16:35",
                "url": "http://1.15.245.21:8888/group1/M00/00/00/rBEAA2IzIqiAIYUnAACQbY6JA7I103.jpg",
                "profession": "计算机",
                "grade": "20级",
                "createTime": "2022-03-18 12:44:22",
                "updateTime": "2022-03-18 12:44:22",
                "class": "201"
            },
            {
                "id": 15,
                "prizeWinner": "小小4",
                "prizeName": "奖项11",
                "prizeTime": "2022-03-17 22:16:35",
                "url": "http://1.15.245.21:8888/group1/M00/00/00/rBEAA2IzIqiAIYUnAACQbY6JA7I103.jpg",
                "profession": "计算机",
                "grade": "20级",
                "createTime": "2022-03-18 12:44:29",
                "updateTime": "2022-03-18 12:44:29",
                "class": "201"
            }
        ],
        "succeed": true,
        "message": "成功",
        "totalElements": 4,
        "currentPage": 1,
        "pageSize": 10,
        "totalPages": 1,
        "numberOfElements": 4
    },
    "succeed": true,
    "message": "成功"
}

例二:直接查询全部奖项

image-20220318124910533

结果:

{
    "result": {
        "records": [
            {
                "id": 2,
                "prizeWinner": "小李",
                "prizeName": "蓝桥杯一等奖省",
                "prizeTime": "2022-03-09 20:42:25",
                "url": "http://1.15.245.21:8888/group1/M00/00/00/rBEAA2IzIqiAIYUnAACQbY6JA7I103.jpg",
                "profession": "计算机",
                "grade": "20级",
                "createTime": "2022-03-13 15:09:34",
                "updateTime": "2022-03-13 15:09:36",
                "class": "202"
            },
            {
                "id": 3,
                "prizeWinner": "小钱",
                "prizeName": "奖项1",
                "prizeTime": "2022-03-17 22:16:35",
                "url": "http://1.15.245.21:8888/group1/M00/00/00/rBEAA2IzIqiAIYUnAACQbY6JA7I103.jpg",
                "profession": "电子信息",
                "grade": "20级",
                "createTime": "2022-03-13 15:17:39",
                "updateTime": "2022-03-13 15:17:42",
                "class": "208"
            },
            {
                "id": 4,
                "prizeWinner": "小金",
                "prizeName": "获奖1",
                "prizeTime": "2022-03-17 20:42:31",
                "url": null,
                "profession": "大气",
                "grade": "19级",
                "createTime": "2022-03-13 16:35:24",
                "updateTime": "2022-03-13 16:35:24",
                "class": "191"
            },
            {
                "id": 6,
                "prizeWinner": "小彭",
                "prizeName": "获奖3",
                "prizeTime": "2022-03-17 20:42:36",
                "url": null,
                "profession": "区块链",
                "grade": "18级",
                "createTime": "2022-03-13 16:42:22",
                "updateTime": "2022-03-13 16:42:22",
                "class": "181"
            },
            {
                "id": 7,
                "prizeWinner": "小刚",
                "prizeName": "获奖7",
                "prizeTime": "2022-03-17 20:42:41",
                "url": null,
                "profession": "资环",
                "grade": "17级",
                "createTime": "2022-03-13 17:46:13",
                "updateTime": "2022-03-13 17:46:13",
                "class": "176"
            },
            {
                "id": 8,
                "prizeWinner": "李华",
                "prizeName": "获奖8",
                "prizeTime": "2022-03-17 20:42:44",
                "url": null,
                "profession": "资环",
                "grade": "19级",
                "createTime": "2022-03-13 17:54:23",
                "updateTime": "2022-03-13 17:54:23",
                "class": "194"
            },
            {
                "id": 9,
                "prizeWinner": "小小",
                "prizeName": "获奖9",
                "prizeTime": "2022-03-17 20:42:47",
                "url": null,
                "profession": "外国语",
                "grade": "21级",
                "createTime": "2022-03-13 21:55:14",
                "updateTime": "2022-03-13 21:55:14",
                "class": "212"
            },
            {
                "id": 11,
                "prizeWinner": "小强",
                "prizeName": "项11",
                "prizeTime": "2022-03-17 22:16:35",
                "url": "http://1.15.245.21:8888/group1/M00/00/00/rBEAA2IzIqiAIYUnAACQbY6JA7I103.jpg",
                "profession": "计算机",
                "grade": "20级",
                "createTime": "2022-03-17 22:26:15",
                "updateTime": "2022-03-17 22:26:15",
                "class": "201"
            },
            {
                "id": 12,
                "prizeWinner": "小小1",
                "prizeName": "奖项11",
                "prizeTime": "2022-03-17 22:16:35",
                "url": "http://1.15.245.21:8888/group1/M00/00/00/rBEAA2IzIqiAIYUnAACQbY6JA7I103.jpg",
                "profession": "计算机",
                "grade": "20级",
                "createTime": "2022-03-18 12:44:11",
                "updateTime": "2022-03-18 12:44:11",
                "class": "201"
            },
            {
                "id": 13,
                "prizeWinner": "小小2",
                "prizeName": "奖项11",
                "prizeTime": "2022-03-17 22:16:35",
                "url": "http://1.15.245.21:8888/group1/M00/00/00/rBEAA2IzIqiAIYUnAACQbY6JA7I103.jpg",
                "profession": "计算机",
                "grade": "20级",
                "createTime": "2022-03-18 12:44:17",
                "updateTime": "2022-03-18 12:44:17",
                "class": "201"
            }
        ],
        "succeed": true,
        "message": "成功",
        "totalElements": 12,
        "currentPage": 1,
        "pageSize": 10,
        "totalPages": 2,
        "numberOfElements": 10
    },
    "succeed": true,
    "message": "成功"
}

欢迎点赞关注哦!
也欢迎到访我的博客!小小的博客传送门!

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

兴趣使然的小小

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

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

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

打赏作者

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

抵扣说明:

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

余额充值