PageHelper:MyBatis的一个分页插件
- 前端(AngularJS)
页面引入分页插件的依赖
<script src="../plugins/angularjs/pagination.js"></script>
<link rel="stylesheet" href="../plugins/angularjs/pagination.css">
构建app模块时引入pagination模块
var app=angular.module('testmod',['pagination']);
在需要分页的表格下面放置分页组件
<tm-pagination conf="paginationConf"></tm-pagination>
定义一个paginationConf对象,里面包含了配置信息
$scope.paginationConf = {
currentPage: 1,
totalItems: 10,
itemsPerPage: 10,
perPageOptions: [10, 20, 30, 40, 50],
onChange: function(){
//这里面需要我们来实现
}
};
写onChange方法的实现
PageHelper会监控paginationConf对象里的currentPage,totalItems,itemsPerPage这几个属性(通过$watch实现),一旦这几个属性发生变化,就会自动触发onChange方法。所以我们需要实现onChange方法
$scope.paginationConf = {
...
//要实现的逻辑就是把当前页码和每页的大小传给后端,拿到后端的返回数据后再更新对应的属性值
onChange: function(){
$scope.findPage( $scope.paginationConf.currentPage, $scope.paginationConf.itemsPerPage)
}
}
$scope.findPage=function(page,rows){
$http.get('../xxx?page='+page+'&rows='+rows).success(
function(response){
$scope.list=response.rows; //更新查询数据
$scope.paginationConf.totalItems=response.total;//更新总记录数
}
);
}
- 后端(SpringMVC+Mybatis)
在Mybatis配置文件里配置PageHelper分页插件
<plugins>
<!-- PageHelper 类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL 六种数据库-->
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
实现分页逻辑
//处理URL,拿到前端传来的的参数 pageNum(int):当前页码 pageSize(int):每页的大小
......
//通过PageHelper加载
PageHelper.startPage(pageNum, pageSize);
//Page是插件封装的一个类,继承了ArrayList<>,所以该类的实例可以直接通过Mybatis相关的dao操作的查询结果来赋值。
Page<entity> page= ...//dao查询操作
//需要返回给前端一个包含了long+List集合的对象(PageResult)
//其中long是总记录数。List是一个包含当前页数据的集合。
//long通过page.getTotal()取得,List通过page.getResult()取得。page就是上面的Page类的一个实例
return new PageResult(page.getTotal(), page.getResult());