PageHelper实现_飞乐鸟的博客-程序员宝宝

添加依赖:

<!-- pagehelper分页模块 -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.2</version>
</dependency>

 pagehelper配置:

#分页插件配置
pagehelper:
    helperDialect: mysql
    reasonable: true
    supportMethodsArguments: true
    params: count=countSql
    returnPageInfo: check

 代码实现:

 PageHelper.startPage(pageNum, pageSize);
 List<User> user= dpmMapper.queryUserList();
 Page<User> dpmPage = PageUtils.page(user);

 

public static <E> Page<E> startPage(int pageNum, int pageSize, boolean count, Boolean reasonable, Boolean pageSizeZero) {
        Page<E> page = new Page(pageNum, pageSize, count);
        page.setReasonable(reasonable);
        page.setPageSizeZero(pageSizeZero);
        Page<E> oldPage = getLocalPage();
        if (oldPage != null && oldPage.isOrderByOnly()) {
            page.setOrderBy(oldPage.getOrderBy());
        }

        setLocalPage(page);
        return page;
    }
public T get() {
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if (map != null) {
            ThreadLocalMap.Entry e = map.getEntry(this);
            if (e != null) {
                @SuppressWarnings("unchecked")
                T result = (T)e.value;
                return result;
            }
        }
        return setInitialValue();
    }

 

 PageHelper将参数保存到page对象中,接着将page的副本存放入ThreadLoacl中,这样可以保证分页的时候,参数互不影响,接着利用了mybatis提供的拦截器,取得ThreadLocal的值,重新拼装分页SQL,完成分页

public class PageUtils<T> implements Serializable {
	private static final long serialVersionUID = 7381468955316253104L;

	public static <T> Page<T> page(List<T> list){
		Page<T> page = new Page<T>(list);
		return page;
	}
}
public class Page<T> implements Serializable {
	
	private static final long serialVersionUID = 6094186219831724663L;
	private List<T> content = new ArrayList<>(); //对象记录结果集
	private long totalPages = 0;  //总页数
	private long totalElements; //总记录数
	private int number;  //当前页
	private int size; //每页显示记录数
	private int numberOfElements; //每页显示实际记录数

	public Page(List<T> temp) {
		com.github.pagehelper.Page<T> result = (com.github.pagehelper.Page<T>) temp;
		if(result != null && result.size() > 0){
			this.content = result.getResult();
			this.totalPages = result.getPages();
			this.totalElements = result.getTotal();
			this.number = result.getPageNum();
			this.size = result.getPageSize();
			this.numberOfElements = this.content.size();
		}
	}
	public Page() {
		super();
	}
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/feikillyou/article/details/87968644

智能推荐

概率算法_weixin_30610755的博客-程序员宝宝

昨天想写一个抽奖类来玩玩。结果确没有思路,于是网上找了一个dome。参考学习之后发现最主要的是概率的计算。于是学习了一个。改方法主要是将所有奖品概率随机一个数,来决定中奖奖品。通过循环来判断随机数是否为中奖奖品,如果不是,去掉该奖品重新判断。/** *概率算法 * @access public * @param array $arr 数组,奖品的id和概率 ...

对于市面主流云游戏技术分析和技术实现的分析_新睿云.任义兵的博客-程序员宝宝

云游戏,是将传统Windows端的游戏,捕获游戏渲染出来的的音视频画面,通过流的形式传送到终端,终端上不再需要安装游戏,各类终端比如说电视、手机、PC、平板都可以运行。 优点是不需要关心游戏怎么去适配不同的软硬件平台、终端性能够不够等等这些问题。云游戏这个概念本身是非常好的,在2009年的时候,这个技术就已经出现了,美国有家叫Onlive 的公司第一个推出云游戏服务,但是他最终在商业上还是失败了,技术最后被索尼公司收购,并运用在PS Now上。云游戏的概念虽然非常好,但里面...

BLIP:用更干净更多样的数据进行多模态预训练,性能超越CLIP!代码已开源!..._我爱计算机视觉的博客-程序员宝宝

关注公众号,发现CV技术之美▊写在前面视觉语言预训练 (VLP) 提高了许多视觉语言任务的性能。但是,大多数现有的预训练模型仅在基于理解的任务或基于生成的任务中表现出色。此外,通过使用从...

LINUX内核协议栈分析初探_confirmwz的博客-程序员宝宝

1说明本文档制作基于版本linux-2.6.32,本文档的目的是让有一定的网络协议基础的人了解到网络数据包在协议栈中的传输流程,大致理解到从网卡收到数据包传输到应用层所经历的步骤,以及每个步骤所做的事情。 图片贴到最后。本文档阅读基础:C语言基础,C语言回调函数,UML建模基础,C++面向对象封装思想,TCP/IP协议或网络基础。2TCP协议本章摘自[...

java gson序列化_gson 自定义特定的序列化的方式_你踩到我法袍了的博客-程序员宝宝

用:JsonSerializer/JsonDeserializerpublic static class StudentJsonSerializer implements JsonSerializer {@Overridepublic JsonElement serialize(Student src, Type typeOfSrc, JsonSerializationContext contex...

随便推点

超市销售系统——数据库系统设计_超市管理系统数据库设计_hidecode的博客-程序员宝宝

【需求描述】:(1)超市业务按部门开展,目前该超市有采购部、销售部、运营部等,每个员工只能在一个部门;员工在入职时需要登记员工姓名、性别、出生日期、身份证、联系电话等信息。(2)超市销售的商品由超市运营部门决定,运营部门在确定销售的商品后,录入商品的详细信息,包含:商品编码、商品名称、条形码、产地、生产厂家、规格型号、商品进价、商品销售价、当前库存数量、库存下限数量等信息。其中,规格型号直接用文本表示;商品编码自行设计编码规则,系统自动生成商品编码。当前库存数量、库存下限数量均要大于等于0。商品营运部每

技术分析中的五种常见指标_技术指标分析_ghostwritten的博客-程序员宝宝

目录相对强弱指数(RSI)移动平均线(MA)平滑异同移动平均线(MACD)随机相对强弱指数(StochRSI)布林线指标(BB)简介市场交易者通过对技术指标的分析来确定资产价格的未来走势。这些指标使得交易者可以更容易的确认当前市场环境的模式以及买卖信号。指标的类型也是形形色色,而每一种也都被日内交易者、短期交易者以及长线投资者所广泛使用。甚至一些专业的分析师和高级交易员创建了他们自己的指标。在本文中,我们将为大家简单介绍一些最常用的技术分析指标。1.相对强弱指数(RSI)相对强弱指数(

python高斯噪声怎么去除_SIFT图像匹配及其python实现_weixin_39722965的博客-程序员宝宝

1 SIFT算法基本原理SITF算法,即尺度不变特征变换(Scale-invariant feature transform)算法,是由David G.Lowe于1999年提出,并在2004年加以完善。论文下载地址:https://www.cs.ubc.ca/~lowe/keypoints/​www.cs.ubc.caLowe将尺度的概念引入到SIFT算法中,利用SIFT方法检测图像特征点的实质就...

ofo共享单车和摩拜单车背后的物联网技术分析_ofo是如何获取用户的三种信息的_铁筑的博客-程序员宝宝

共享单车现在已经成为了一个“现象级产品,目前最热的是出生在北京的ofo小黄车以及源于上海的摩拜小橙车,本文从物联网技术角度对这两者做一些比较和说明,试图解密共享单车ofo和摩拜背后的物联网技术。

推荐文章

热门文章

相关标签