阅读本文前假定你已知晓springboot的基本配置及使用。
本案例基于springboot2.1.13版本进行搭建,引入的依赖主要有Spring Boot DevTools、MyBatis Framework、MySQL Driver、Spring Web、druid、log4j等。
<dependency>
<groupId>com.github.pagehelpergroupId>
<artifactId>pagehelper-spring-boot-starterartifactId>
<version>1.2.10version>
dependency>
#pageHelper配置
pagehelper:
helper-dialect: mysql
reasonable: true
support-methods-arguments: true
具体而言,pageHelper的使用是在service层进行的。我们一步步解析在案例中的具体使用。
CREATE TABLE `t_goods` (
`id` bigint(20) NOT NULL COMMENT '商品id',
`category_id` bigint(20) DEFAULT NULL COMMENT '分类id',
`item_type` varchar(100) DEFAULT NULL COMMENT '商品系列',
`title` varchar(100) DEFAULT NULL COMMENT '商品标题',
`sell_point` varchar(150) DEFAULT NULL COMMENT '商品卖点',
`price` bigint(20) DEFAULT NULL COMMENT '商品单价',
`num` int(10) DEFAULT NULL COMMENT '库存数量',
`barcode` varchar(30) DEFAULT NULL COMMENT '条形码',
`image` varchar(500) DEFAULT NULL COMMENT '图片路径',
`status` int(1) DEFAULT '1' COMMENT '商品状态 1:上架 2:下架 3:删除',
`priority` int(10) DEFAULT NULL COMMENT '显示优先级',
`created_time` datetime DEFAULT NULL COMMENT '创建时间',
`modified_time` datetime DEFAULT NULL COMMENT '最后修改时间',
`created_user` varchar(50) DEFAULT NULL COMMENT '创建人',
`modified_user` varchar(50) DEFAULT NULL COMMENT '最后修改人',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
abstract class BaseEntity implements Serializable {
private static final long serialVersionUID = 9021858752188913078L;
private Date createdTime;
private String createdUser;
private Date modifiedTime;
private String modifiedUser;
// GET/SET
}
public class Goods extends BaseEntity{
private static final long serialVersionUID = -6308520094266229468L;
private Long id;
private Long categoryId;
private String itemType;
private String title;
private String sellPoint;
private Long price;
private Integer num;
private String barcode;
private String image;
private Integer status;
private Integer priority;
// GET/SET/equals/hashCode/toString
}
public class JsonResult<T> implements Serializable {
private static final long serialVersionUID = -1016527431654819750L;
private Integer state;
private String message;
private T data;
public JsonResult() {
}
public JsonResult(Integer state) {
this.state = state;
}
public JsonResult(Integer state, T data) {
this.state = state;
this.data = data;
}
// GET/SET/toString
}
public class RequestPage implements Serializable {
private static final long serialVersionUID = -1890318518499001949L;
private Integer pageNum;
private Integer pageSize;
// GET/SET
}
public interface GoodsMapper {
/**
* 获取所有商品
* @return 商品集合
*/
List<Goods> findAll();
}
<mapper namespace="cn.xie.paging.mapper.GoodsMapper">
<select id="findAll" resultType="cn.xie.paging.entity.Goods">
SELECT
id, category_id AS categoryId,
item_type AS itemType, title,
sell_point AS sellPoint, price,
num, barcode,
image, status,
priority,
created_time AS createdTime, created_user AS createdUser,
modified_time AS modifiedTime, modified_user AS modifiedUser
FROM
t_goods
ORDER BY
modifiedTime desc
select>
mapper>
public interface IGoodsService {
PageInfo<Goods> getByPage(int pageNum, int pageSize);
}
@Service
public class GoodsServiceImpl implements IGoodsService {
@Autowired
private GoodsMapper goodsMapper;
@Override
public PageInfo<Goods> getByPage(int pageNum, int pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<Goods> list = findAll();
PageInfo<Goods> pageInfo = new PageInfo<>(list);
return pageInfo;
}
/**
* 获取所有商品
* @return 商品集合
*/
private List<Goods> findAll() {
return goodsMapper.findAll();
}
}
控制器GoodsController
@RestController
@RequestMapping("goods")
public class GoodsController {
@Autowired
private IGoodsService goodsService;
@GetMapping("get_by_page")
public JsonResult<PageInfo> getByPage(RequestPage requestPage){
PageInfo<Goods> pageInfo = goodsService.getByPage(requestPage.getPageNum(), requestPage.getPageSize());
return new JsonResult<>(2000, pageInfo);
}
}
启动项目,使用postman,向服务器发起请求http://localhost:8080/goods/get_by_page?pageNum=1&pageSize=5
,结果如下。
{
"state": 2000,
"data": {
"total": 56,
"list": [
{
"createdTime": "2017-10-25T07:08:55.000+0000",
"createdUser": "admin",
"modifiedTime": "2017-10-25T07:08:55.000+0000",
"modifiedUser": "admin",
"id": 100000021,
"categoryId": 238,
"itemType": "皮面日程本",
"title": "广博(GuangBo)皮面日程本子 计划记事本效率手册蓝色FB60321",
"sellPoint": "经典回顾!超值特惠!",
"price": 22,
"num": 99999,
"image": "/images/portal/001GuangBo)FB60322/",
"status": 1,
"priority": 73
},
{
"createdTime": "2017-10-25T07:08:55.000+0000",
"createdUser": "admin",
"modifiedTime": "2017-10-25T07:08:55.000+0000",
"modifiedUser": "admin",
"id": 10000001,
"categoryId": 238,
"itemType": "牛皮纸记事本",
"title": "广博(GuangBo)10本装40张A5牛皮纸记事本子日记本办公软抄本GBR0731",
"sellPoint": "经典回顾!超值特惠!",
"price": 23,
"num": 99999,
"image": "/images/portal/00GuangBo1040A5GBR0731/",
"status": 1,
"priority": 62
},
{
"createdTime": "2017-10-25T07:08:55.000+0000",
"createdUser": "admin",
"modifiedTime": "2017-10-25T07:08:55.000+0000",
"modifiedUser": "admin",
"id": 10000002,
"categoryId": 238,
"itemType": "皮面日程本",
"title": "广博(GuangBo)皮面日程本子 计划记事本效率手册米色FB60322",
"sellPoint": "经典回顾!超值特惠!",
"price": 46,
"num": 99999,
"image": "/images/portal/001GuangBo)FB60322/",
"status": 1,
"priority": 49
},
{
"createdTime": "2017-10-25T07:08:55.000+0000",
"createdUser": "admin",
"modifiedTime": "2017-10-25T07:08:55.000+0000",
"modifiedUser": "admin",
"id": 10000003,
"categoryId": 238,
"itemType": "16k记事本",
"title": "广博(GuangBo)16K115页线圈记事本子日记本文具笔记本图案随机",
"sellPoint": "经典回顾!超值特惠!",
"price": 13,
"num": 99999,
"image": "/images/portal/01GuangBo16K115FB60506/",
"status": 1,
"priority": 58
},
{
"createdTime": "2017-10-25T07:08:55.000+0000",
"createdUser": "admin",
"modifiedTime": "2017-10-25T07:08:55.000+0000",
"modifiedUser": "admin",
"id": 10000004,
"categoryId": 241,
"itemType": "计算器",
"title": "得力(deli)1548A商务办公桌面计算器 太阳能双电源",
"sellPoint": "经典回顾!超值特惠!",
"price": 58,
"num": 99999,
"image": "/images/portal/002calculator1548A/",
"status": 1,
"priority": 42
}
],
"pageNum": 1,
"pageSize": 5,
"size": 5,
"startRow": 1,
"endRow": 5,
"pages": 12,
"prePage": 0,
"nextPage": 2,
"isFirstPage": true,
"isLastPage": false,
"hasPreviousPage": false,
"hasNextPage": true,
"navigatePages": 8,
"navigatepageNums": [
1,
2,
3,
4,
5,
6,
7,
8
],
"navigateFirstPage": 1,
"navigateLastPage": 8
}
}
项目源码:paging.zip