PageHelper的基础使用

0.从源码层面上理解PageHelper

   简单的点击了一下,觉得挺复杂的,决定把设计模式透析之后,再来分析。PageHelper结合MyBatis进行使用,通过拦截器保证pageNum和pageSize以及total,然后一个 wrapper,还有一个代理模式。

1.搭建 PageHelper的工程环境。

   1.1 添加依赖    网上很多只有一个依赖,你就加俩吧,有个错误会偶尔出现。total=0,这个问题。

       <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.2</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.5</version>
        </dependency>

  1.2 application.properties 文件

   

# 指定数据库,不指定的话会默认自动检测数据库类型
pagehelper.helperDialect=mysql
# 是否启用分页合理化。
# 如果启用,当pagenum<1时,会自动查询第一页的数据,当pagenum>pages时,自动查询最后一页数据;
# 不启用的,以上两种情况都会返回空数据
pagehelper.reasonable=true
# 默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。
pagehelper.supportMethodsArguments=true
# 用于从对象中根据属性名取值,
# 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值,
# 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero
pagehelper.params=count=countSql

2. 代码中使用 分页插件      

  controller 层,一般不配置pageHelper参数,一般写在 serivice 层

2.1    假设存在实体 StuInfoResp
2.2    配置 PageBean

       

 // 分页结果
public class PageBean<T> implements Serializable {
	private static final long serialVersionUID = 84154532474854546L;

	/**
	 * 查询第几页	
	 */
	private final int pageNum;
	
	/**
	 * 每页多少条
	 */
	private final int pageSize;
	
	/**
	 * 总条数
	 */
	private final long total;
	
	/**
	 * 总页数
	 */
	private final int totalPages;
	
	/**
	 * 分页结果序列
	 */
	private final List<T> content;

	public PageBean(final int pageNum, final int pageSize, final long total, final List<T> content) {
		this.pageNum = pageNum;
		this.pageSize = pageSize;
		this.total = total;
		this.content = content;
		this.totalPages = pageSize == 0 ? 0 : (int) Math.ceil((double) total / (double) pageSize);
	}

	/**
	 * 返回当前页面数
	 * @return
	 */
	public int getPageNum(){
		return pageNum;
	}

	/**
	 * 返回每页长度
	 * @return
	 */
	public int getPageSize(){
		return pageSize;
	}

	/**
	 * 返回总页数
	 * @return
	 */
	public int getTotalPages(){
		return totalPages;
	}

	/**
	 * 是否还有下一页
	 * @return
	 */
	public boolean hasNextPage(){
		return ((getPageNum() + 1) * getPageSize()) < total;
	}

	/**
	 * 将查询出的结果以list形式返回
	 * @return
	 */
	public List<T> getContent(){
		return content;
	}

	/**
	 * 是否查询出结果
	 * @return
	 */
	public boolean hasContent(){
		return !content.isEmpty();
	}

	/**
	 * 获取总条数
	 * @return
	 */
	public long getTotal() {
		return total;
	}
	
}

         2.3 工程中使用

     

  public PageBean<StuInfoResp> function(YouReq req) {
        Page<Object> page = PageHelper.startPage(req.getPageNum(), req.getPageSize());
        PageHelper.orderBy("created_time desc");
        PageBean<StuInfoResp> pageBean = new PageBean<>(req.getPageNum(), req.getPageSize(), page.getTotal(), Lists.newArrayList());
        // TODO 你的业务数据封装成 List
        return pageBean;
    }

   

 

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值