springboot+pageHelper实现分页

springboot+pageHelper实现分页

  • 1. 前置条件
  • 2. 具体实施
    • 2.1 项目搭建
    • 2.2 pageHelper的引入及配置
    • 2.3 在项目中使用
      • 2.3.1 数据表
      • 2.3.2 实体类
      • 2.3.3 工具类
      • 2.3.4 持久层
      • 2.3.5 业务层
      • 2.3.6 控制器
    • 2.4 测试

1. 前置条件

阅读本文前假定你已知晓springboot的基本配置及使用。

2. 具体实施

2.1 项目搭建

本案例基于springboot2.1.13版本进行搭建,引入的依赖主要有Spring Boot DevToolsMyBatis FrameworkMySQL DriverSpring Webdruidlog4j等。

2.2 pageHelper的引入及配置

  1. pom.xml中添加如下依赖

<dependency>
	<groupId>com.github.pagehelpergroupId>
	<artifactId>pagehelper-spring-boot-starterartifactId>
	<version>1.2.10version>
dependency>
  1. application.yml中做如下配置
#pageHelper配置
pagehelper:
  helper-dialect: mysql
  reasonable: true
  support-methods-arguments: true

2.3 在项目中使用

具体而言,pageHelper的使用是在service层进行的。我们一步步解析在案例中的具体使用。

2.3.1 数据表

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

2.3.2 实体类

  1. 实体类的基类BaseEntity
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
}
  1. 商品的实体类Goods
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
}

2.3.3 工具类

  1. JsonResult用于封装结果
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
}
  1. RequestPage用于封装请求参数
public class RequestPage implements Serializable {
     

    private static final long serialVersionUID = -1890318518499001949L;

    private Integer pageNum;
    private Integer pageSize;
	// GET/SET
}

2.3.4 持久层

  1. 持久层接口GoodsMapper
public interface GoodsMapper {
     
    /**
     * 获取所有商品
     * @return 商品集合
     */
    List<Goods> findAll();
}
  1. SQL语句映射文件GoodsMapper
<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>

2.3.5 业务层

  1. 业务层接口IGoodsService
public interface IGoodsService {
     
    PageInfo<Goods> getByPage(int pageNum, int pageSize);
}
  1. 业务层实现类GoodsServiceImpl
@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();
    }

}

2.3.6 控制器

控制器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);
    }

}

2.4 测试

启动项目,使用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

你可能感兴趣的:(spring,boot,mysql,java)