Jenkins JS DHCP xaml pdo sass openssl webkit grunt bootstrap后台管理系统 jquery获取dom对象 bootstrap中文api文档 mysql批量更新数据 abaqus是什么软件 python中str函数 配置python环境 python抛异常 java查看版本 java当前时间 垃圾邮件数据集 黑客攻防实战入门 bat脚本 iphone滚动截屏 免费书籍 虚拟打印机安装 16进制编辑器 bz2 mac画图工具 kafka权威指南 vue引入第三方js 图片转pdf免费软件 cf小号 怎么看淘龄 文件粉碎工具 键盘打字手指口诀 小米开发者选项 fabfilter 微信昵称特殊符号 php单例模式 苹果拼多多商家版本
当前位置: 首页 > 学习教程  > 编程语言

PageHelper的基础使用

2020/9/19 16:08:35 文章标签:

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;
    }

   

 


本文链接: http://www.dtmao.cc/news_show_200361.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?