Page分页工具类,正常情况使用mybatis-plus等插件的分页工具,迫不得已自己实现

Page分页工具类,正常情况使用mybatis-plus等插件的分页工具,迫不得已自己实现

问题背景

由于xml中写了一个多表关联的sql语句,并且是多对多,导致查询出来的是有自己不需要的重复语句,更坑的是,可能sql自己写得澜,去重功能distinct和order by在特殊条件下不能同时使用,报错:Expression #1 of ORDER BY clause is not in SELECT list, references column ‘fusion.m.create_time’ which is not in SELECT list; this is incompatible with DISTINCT,所以我是把所有数据查询出来之后,自己做了一个去重,再进行分页,如果使用插件的分页,一开始就会把分页设置传入进去,出来的时候分页是带重复的数据,这个时候去重,页面显示出来的就没有一开始传入的分页参数这么多,比如每页需要显示20条,这个时候就只剩10条了

PageUtils分页工具类

1 分页方法

package com.dz.fusion.support.common;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author suolong
 * @Date 2022/7/6 19:05
 * @Version 2.0
 */
@Data
public class PageUtils<T> {

    private List<T> pages;    //数据
    private long totalCount;    //总数
    private int pageIndex;    //当前页
    private int totalPages;    //总页数


    /**
     * <p>分页方法</p>
     * <p>参数(当前页码,每页行数)</p>
     * <p>返回	pages 数据</p>
     * <p>		totalCount	总数</p>
     * <p>		pageIndex	当前页</p>
     * <p>		totalPages	总页数</p>
     */
    public PageUtils(int pageIndex, int hang, List<T> pages) {

        int fist = pageIndex * hang - hang;    //获取当前页的第一行下标
        int last = pageIndex * hang;        //获取当前页的最后一行下标+1
        if (last > pages.size()) last = pages.size();

        List<T> page = new ArrayList<T>();
        for (int s = fist; s < last; s++) {
            page.add(pages.get(s));
        }

        this.pages = page;        //分页数据
        this.totalCount = pages.size();    //总行数
        this.pageIndex = pageIndex;        //当前页
        this.totalPages = (int) Math.ceil((float) pages.size() / hang);    //总页数
    }

}

2 使用方式

        List<User> list= baseMapper.selectList();
        PageUtils<User> userPages = new PageUtils<>(页码, 每页行数, list);
        long totalCount = userPages.getTotalCount();    //总行数        
        List<User> records = userPages .getPages();    //每页的数据




作为程序员第 197 篇文章,每次写一句歌词记录一下,看看人生有几首歌的时间,wahahaha …

Lyric: 我干脆自己下车 指挥乐坛的交通

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值