2、springBoot集成mybatis分页插件PageHelper

阳光穿透心脏的1/2处 2022-05-26 07:48 358阅读 0赞

前言

PageHelper是一款非常好用的分页插件,它和Mybatis工作在一起,可以大幅提升开发效率。PageHelper是通过Mybatis的拦截器插件原理实现的。

1、导入依赖

  1. <!--分页插件-->
  2. <dependency>
  3. <groupId>com.github.pagehelper</groupId>
  4. <artifactId>pagehelper</artifactId>
  5. <version>4.1.6</version>
  6. </dependency>

2、启动加载PageHelperbean

  1. package com.hlj.mybatisxml.pagehelper;
  2. import com.github.pagehelper.PageHelper;
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.context.annotation.Configuration;
  7. import java.util.Properties;
  8. /**
  9. * @Description
  10. * @Author HealerJean
  11. * @Date 2018/4/26 上午11:58.
  12. */
  13. @Configuration
  14. public class PageHelperConfiguration {
  15. private static final Logger log = LoggerFactory.getLogger(PageHelperConfiguration.class);
  16. @Bean
  17. public PageHelper pageHelper() {
  18. log.info("------Register MyBatis PageHelper");
  19. PageHelper pageHelper = new PageHelper();
  20. Properties p = new Properties();
  21. p.setProperty("offsetAsPageNum", "true");
  22. p.setProperty("rowBoundsWithCount", "true");
  23. p.setProperty("reasonable", "true");
  24. //通过设置pageSize=0或者RowBounds.limit = 0就会查询出全部的结果。
  25. p.setProperty("pageSizeZero", "true");
  26. pageHelper.setProperties(p);
  27. return pageHelper;
  28. }
  29. }

3、直接分页开始

只要找出list来就可以进行分页了

  1. @RestController
  2. public class PageHelperController {
  3. @Resource
  4. private BasesetUserMapper basesetUserMapper;
  5. @RequestMapping(value = "page")
  6. public PageInfo<BasesetUser> queryAll(@RequestParam(value = "pageNum", required = false, defaultValue="1") Integer pageNum,
  7. @RequestParam(value = "pageSize", required = false, defaultValue="10") Integer pageSize) {
  8. //传入第几页和大小
  9. PageHelper.startPage(pageNum, pageSize);
  10. List<BasesetUser> list = basesetUserMapper.findMyall();
  11. PageInfo<BasesetUser> pageInfo = new PageInfo<BasesetUser>(list);
  12. return pageInfo;
  13. }
  14. }

4、测试

  1. http://localhost:8888/page?pageNum=1&pageSize=2
  2. {
  3. "pageNum": 1,
  4. "pageSize": 2,
  5. "size": 2,
  6. "orderBy": null,
  7. "startRow": 1,
  8. "endRow": 2,
  9. "total": 6,
  10. "pages": 3,
  11. "list": [{
  12. "id": 1,
  13. "username": "HealerJean",
  14. "password": "213456",
  15. "enable": 1
  16. }, {
  17. "id": 2,
  18. "username": "HealerJean",
  19. "password": "213456",
  20. "enable": 1
  21. }],
  22. "firstPage": 1,
  23. "prePage": 0,
  24. "nextPage": 2,
  25. "lastPage": 3,
  26. "isFirstPage": true,
  27. "isLastPage": false,
  28. "hasPreviousPage": false,
  29. "hasNextPage": true,
  30. "navigatePages": 8,
  31. "navigatepageNums": [1, 2, 3]
  32. }

补充,代码中没有

1、 通过分页对象进行前端传入

  1. package com.appshike.admin.domain.page;
  2. import io.swagger.annotations.ApiModel;
  3. import io.swagger.annotations.ApiModelProperty;
  4. import lombok.Getter;
  5. import lombok.Setter;
  6. import lombok.experimental.Accessors;
  7. import springfox.documentation.annotations.ApiIgnore;
  8. @Setter
  9. @ApiModel("分页对象")
  10. @Accessors(chain = true)
  11. public class PageQuery {
  12. @ApiModelProperty(value = "开始页数,从1开始",example = "1", required = true,dataType = "java.lang.Integer")
  13. private Integer pageNum = 1;
  14. @ApiModelProperty(value = "每页数量",example = "20", required = true,dataType = "java.lang.Integer")
  15. private Integer pageSize = 20;
  16. @ApiModelProperty(hidden = true)
  17. public Integer getPageSize() {
  18. return pageSize == null ? 20 : pageSize;
  19. }
  20. public Integer getPageNum() {
  21. return pageNum == null ? 1 : pageNum;
  22. }
  23. }

2、controller 其实和pageable是一样的了,是吧,但是这里根本不需要关注里面发生了什么只给一个list就可以了

  1. @GetMapping("getCategoryTagList")
  2. public Wrapper<?> getCategoryTagList(Long categoryId,Short classify, PageQuery pageQuery){
  3. Map<String,Object> query = new HashMap<String,Object>();
  4. query.put("categoryId", categoryId);
  5. query.put("classify", classify);
  6. PageInfo<TVideoCategoryTagVO> page = zqCategoryService.getCategoryTagList(query, pageQuery);
  7. return WrapMapper.ok(page);
  8. }

3、service

  1. @TargetDataSource(DataSource.ZUIQIANG)
  2. @Override
  3. public PageInfo<TVideoCategoryTagVO> getCategoryTagList(Map<String,Object> query, PageQuery pageQuery) {
  4. PageHelper.startPage(pageQuery.getPageNum(),pageQuery.getPageSize());
  5. List<TVideoCategoryTagVO> beanList = tVideoCategoryTagMapper.getList(query);
  6. return new PageInfo<>(beanList);
  7. }

源码下载

ContactAuthor

发表评论

表情:
评论列表 (有 0 条评论,358人围观)

还没有评论,来说两句吧...

相关阅读