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: 我干脆自己下车 指挥乐坛的交通
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/110678.html