当要显示数据量足够大的时候,我们往往采用分页显示的处理办法。
分页有真分页和假分页。
一、真分页
确定要显示的数量和内容,然后每次都去数据库取出该少量数据,优点是数据量小,缺点是访问数据库频繁。在大型网站中往往采用真分页,比如百度的图片获取。
二、假分页
从数据库中取出所有的数据,然后分页在界面上显示。访问一次数据库,但由于选择的数据量比较大,所以第一次花费时间比较长,但之后每一页的显示都是直接、快速的,避免对数据库的多次访问。
分页工具(mybatis)
pageHelper使用的例子
参考官网进行配置
1. 引入分页插件
使用推荐的maven方式。
在pom.xml中添加如下依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>最新版本</version>
</dependency>
!!!!!
千万注意,ssm项目当我们引入了新的依赖,一定要在project structure中的lib中添加依赖
2. 配置拦截器插件
两种配置方法:1)在mybatis配置xml中配置拦截器插件,2)在spring配置文件中配置拦截器插件
这里选择的是在mybatis配置xml中配置拦截器插件(里面的property参数配置参考下一点)
<!--
plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
properties?, settings?,
typeAliases?, typeHandlers?,
objectFactory?,objectWrapperFactory?,
plugins?,
environments?, databaseIdProvider?, mappers?
-->
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
<property name="helperDialect" value="mysql"/>
<property name="reasonable" value="true"/>
</plugin>
</plugins>
3. 分页插件参数介绍和配置
具体参考官网。
本例中使用了 1)helperDialect 2)reasonable两个参数。
4. 在代码中使用
直接在controller控制器中写我们的pageinfo分页信息的控制器,也是要加@RequestMapping和@ResponseBody两个注解,通过访问特定mapper,返回json格式的分页查询数据。
在本例中,直接在TProductController.java
中添加控制器
/**
* 分页实现
* 获得分页对象,里面封装了分页需要用到的所有信息
* @param pageNum 当前是第几页
* @param pageSize 当前页一共显示多少条记录
* @return
*/
@RequestMapping(value = "/pageInfo", method = RequestMethod.GET)
@ResponseBody
public PageInfo<TProduct> getPageInfo(int pageNum, int pageSize){
//1. 通过调用PageHelper的静态方法开始获取分页数据
//指定当前是第一页,以及每页侠士的记录条数
PageHelper.startPage(pageNum, pageSize);
//2. 获取所有的商品记录
List<TProduct> list = productService.getList();
//3. 获得当前分页对象
PageInfo<TProduct> pageInfo = new PageInfo<TProduct>(list);
return pageInfo;
}
5. 访问接口测试
通过postman测试接口,用的是get方法,参数有pageNum和pageSize两个
得到返回的数据
{
"total": 15,
"list": [
{
"id": 9,
"name": "M11",
"images": "aaaa",
"price": 1333,
"salePrice": 5000,
"salePoint": "sdf",
"typeId": 1,
"typeName": "sss",
"flag": true,
"createTime": "2019-06-05 00:10:29",
"updateTime": "2019-06-21 00:10:34",
"createUser": 1,
"updateUser": 1
},
{
"id": 11,
"name": "M13",
"images": "aaaa",
"price": 3333,
"salePrice": 222,
"salePoint": "sdf",
"typeId": 1,
"typeName": "sss",
"flag": true,
"createTime": "2019-06-05 00:10:29",
"updateTime": "2019-06-21 00:10:34",
"createUser": 1,
"updateUser": 1
},
{
"id": 12,
"name": "M14",
"images": "aaaa",
"price": 4333,
"salePrice": 222,
"salePoint": "sdf",
"typeId": 1,
"typeName": "sss",
"flag": true,
"createTime": "2019-06-05 00:10:29",
"updateTime": "2019-06-21 00:10:34",
"createUser": 1,
"updateUser": 1
},
{
"id": 15,
"name": "M15",
"images": "aaaa",
"price": 555,
"salePrice": 222,
"salePoint": "sdf",
"typeId": 1,
"typeName": "sss",
"flag": true,
"createTime": "2019-06-05 00:10:29",
"updateTime": "2019-06-21 00:10:34",
"createUser": 1,
"updateUser": 1
},
{
"id": 16,
"name": "M16",
"images": "aaaa",
"price": 666,
"salePrice": 222,
"salePoint": "sdf",
"typeId": 1,
"typeName": "sss",
"flag": true,
"createTime": "2019-06-05 00:10:29",
"updateTime": "2019-06-21 00:10:34",
"createUser": 1,
"updateUser": 1
}
],
"pageNum": 1,
"pageSize": 5,
"size": 5,
"startRow": 1,
"endRow": 5,
"pages": 3,
"prePage": 0,
"nextPage": 2,
"isFirstPage": true,
"isLastPage": false,
"hasPreviousPage": false,
"hasNextPage": true,
"navigatePages": 8,
"navigatepageNums": [
1,
2,
3
],
"navigateFirstPage": 1,
"navigateLastPage": 3
}