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

2,096 阅读2分钟

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

1 项目准备

2 分页插件

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

<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.4.6</version>
</dependency>

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

pagehelper:
  helperDialect: mysql
  reasonable: true
  supportMethodsArguments: true
  params: count=countSql

3 PageResult 与 PageRequest 、PageUtils

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

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

/**
 * 分页请求
 */
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class PageRequest {
    /**
     * 当前页码
     */
    private int pageNum;
    /**
     * 每页数量
     */
    private int pageSize;

}

定义分页返回结果集 PageResult

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.util.List;
/**
 * 分页返回结果
 */

@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class PageResult {
    /**
     * 当前页码
     */
    private int pageNum;
    /**
     * 每页数量
     */
    private int pageSize;
    /**
     * 记录总数
     */
    private long totalSize;
    /**
     * 页码总数
     */
    private int totalPages;
    /**
     * 数据模型
     */
    private List<?> content;
  
}

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

import com.github.pagehelper.PageInfo;

public class PageUtils {

    public static PageResult getPageResult(PageRequest pageRequest, PageInfo<?> pageInfo) {
        PageResult pageResult = new PageResult();
        pageResult.setPageNum(pageInfo.getPageNum());
        pageResult.setPageSize(pageInfo.getPageSize());
        pageResult.setTotalSize(pageInfo.getTotal());
        pageResult.setTotalPages(pageInfo.getPages());
        pageResult.setContent(pageInfo.getList());
        return pageResult;
    }
}

4 实现分页请求

首先是 UserController 中

@Api(tags="用户模块")
@RestController
@RequestMapping("user")
public class UserController {
    @Resource
    private UserService userService;
 
    @PostMapping(value="/findPage")
    @ApiOperation(value = "分页查询")
    public Object findPage(@RequestBody PageRequest pageQuery) {
        return userService.findPage(pageQuery);
    }
}

UserService.java

public interface UserService {
    PageResult findPage(PageRequest pageRequest);
}

UserServiceImpl.java

@Service
public class UserServiceImpl implements UserService {
    @Resource
    private UserMapper userMapper;
 
    @Override
    public PageResult findPage(PageRequest pageRequest) {
        return PageUtils.getPageResult(pageRequest, getPageInfo(pageRequest));
    }

    /**
     * 调用分页插件完成分页
     * @return
     */
    private PageInfo<UserInfo> getPageInfo(PageRequest pageRequest) {
        int pageNum = pageRequest.getPageNum();
        int pageSize = pageRequest.getPageSize();
        PageHelper.startPage(pageNum, pageSize);
        List<UserInfo> userInfoList = userMapper.selectPage();
        return new PageInfo<UserInfo>(userInfoList);
    }
}

UserMapper.java

public interface UserMapper {
    List<UserInfo> selectList();



    /**
     * 分页查询用户
     * @return
     */
    List<UserInfo> selectPage();
}

UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.biglead.demo.mapper.UserMapper">
    <resultMap id="BaseResultMap" type="com.biglead.demo.pojo.UserInfo">
        <id column="id" jdbcType="BIGINT" property="userId"/>
        <result column="create_time" property="createTime"/>
        <result column="user_name" property="userName"/>
        <result column="user_age" property="userAge"/>
    </resultMap>

    <select id="selectList" resultMap="BaseResultMap">
        select id, user_name, user_age, create_time
        from t_user
    </select>

    <select id="selectPage" resultMap="BaseResultMap">
        select id, user_name, user_age, create_time
        from t_user
    </select>

</mapper>

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

项目源码在这里 :gitee.com/android.lon… 有兴趣可以关注一下公众号:biglead

本文正在参加「金石计划」