SpringBoot MyBatis 实现分页查询数据【SpringBoot系列4】

待我称王封你为后i 2023-10-08 20:04 56阅读 0赞

SpringCloud 大型系列课程正在制作中,欢迎大家关注与提意见。
程序员每天的CV 与 板砖,也要知其所以然,本系列课程可以帮助初学者学习 SpringBooot 项目开发 与 SpringCloud 微服务系列项目开发

1 项目准备

创建SpringBoot基础项目
SpringBoot项目集成mybatis
SpringBoot 集成 Druid 数据源【SpringBoot系列3】

2 分页插件

pagehelper是一个mybatis的分页插件,首先在 pom.xml 文件中添加分页插件依赖包。

  1. <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
  2. <dependency>
  3. <groupId>com.github.pagehelper</groupId>
  4. <artifactId>pagehelper-spring-boot-starter</artifactId>
  5. <version>1.4.6</version>
  6. </dependency>

然后在 application.yml 配置文件中添加分页插件有关的配置。

  1. pagehelper:
  2. helperDialect: mysql
  3. reasonable: true
  4. supportMethodsArguments: true
  5. params: count=countSql
3 PageResult 与 PageRequest 、PageUtils

定义分页请求体,主要是用于当前请求的是第几页数据以及每页数据加载多少条

  1. import lombok.AllArgsConstructor;
  2. import lombok.Data;
  3. import lombok.NoArgsConstructor;
  4. import lombok.ToString;
  5. /**
  6. * 分页请求
  7. */
  8. @Data
  9. @ToString
  10. @AllArgsConstructor
  11. @NoArgsConstructor
  12. public class PageRequest {
  13. /**
  14. * 当前页码
  15. */
  16. private int pageNum;
  17. /**
  18. * 每页数量
  19. */
  20. private int pageSize;
  21. }

定义分页返回结果集 PageResult

  1. import lombok.AllArgsConstructor;
  2. import lombok.Data;
  3. import lombok.NoArgsConstructor;
  4. import lombok.ToString;
  5. import java.util.List;
  6. /**
  7. * 分页返回结果
  8. */
  9. @Data
  10. @ToString
  11. @AllArgsConstructor
  12. @NoArgsConstructor
  13. public class PageResult {
  14. /**
  15. * 当前页码
  16. */
  17. private int pageNum;
  18. /**
  19. * 每页数量
  20. */
  21. private int pageSize;
  22. /**
  23. * 记录总数
  24. */
  25. private long totalSize;
  26. /**
  27. * 页码总数
  28. */
  29. private int totalPages;
  30. /**
  31. * 数据模型
  32. */
  33. private List<?> content;
  34. }

PageUtils 将分页信息封装到统一的接口

  1. import com.github.pagehelper.PageInfo;
  2. public class PageUtils {
  3. public static PageResult getPageResult(PageRequest pageRequest, PageInfo<?> pageInfo) {
  4. PageResult pageResult = new PageResult();
  5. pageResult.setPageNum(pageInfo.getPageNum());
  6. pageResult.setPageSize(pageInfo.getPageSize());
  7. pageResult.setTotalSize(pageInfo.getTotal());
  8. pageResult.setTotalPages(pageInfo.getPages());
  9. pageResult.setContent(pageInfo.getList());
  10. return pageResult;
  11. }
  12. }
4 实现分页请求

首先是 UserController 中

  1. @Api(tags="用户模块")
  2. @RestController
  3. @RequestMapping("user")
  4. public class UserController {
  5. @Resource
  6. private UserService userService;
  7. @PostMapping(value="/findPage")
  8. @ApiOperation(value = "分页查询")
  9. public Object findPage(@RequestBody PageRequest pageQuery) {
  10. return userService.findPage(pageQuery);
  11. }
  12. }

UserService.java

  1. public interface UserService {
  2. PageResult findPage(PageRequest pageRequest);
  3. }

UserServiceImpl.java

  1. @Service
  2. public class UserServiceImpl implements UserService {
  3. @Resource
  4. private UserMapper userMapper;
  5. @Override
  6. public PageResult findPage(PageRequest pageRequest) {
  7. return PageUtils.getPageResult(pageRequest, getPageInfo(pageRequest));
  8. }
  9. /**
  10. * 调用分页插件完成分页
  11. * @return
  12. */
  13. private PageInfo<UserInfo> getPageInfo(PageRequest pageRequest) {
  14. int pageNum = pageRequest.getPageNum();
  15. int pageSize = pageRequest.getPageSize();
  16. PageHelper.startPage(pageNum, pageSize);
  17. List<UserInfo> userInfoList = userMapper.selectPage();
  18. return new PageInfo<UserInfo>(userInfoList);
  19. }
  20. }

UserMapper.java

  1. public interface UserMapper {
  2. List<UserInfo> selectList();
  3. /**
  4. * 分页查询用户
  5. * @return
  6. */
  7. List<UserInfo> selectPage();
  8. }

UserMapper.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.biglead.demo.mapper.UserMapper">
  4. <resultMap id="BaseResultMap" type="com.biglead.demo.pojo.UserInfo">
  5. <id column="id" jdbcType="BIGINT" property="userId"/>
  6. <result column="create_time" property="createTime"/>
  7. <result column="user_name" property="userName"/>
  8. <result column="user_age" property="userAge"/>
  9. </resultMap>
  10. <select id="selectList" resultMap="BaseResultMap">
  11. select id, user_name, user_age, create_time
  12. from t_user
  13. </select>
  14. <select id="selectPage" resultMap="BaseResultMap">
  15. select id, user_name, user_age, create_time
  16. from t_user
  17. </select>
  18. </mapper>

然后在 postman 中执行请求,已可以实现分页请求
在这里插入图片描述

项目源码在这里 :https://gitee.com/android.long/spring-boot-study/tree/master/biglead-api-04-pagehelper
有兴趣可以关注一下公众号:biglead

发表评论

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

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

相关阅读