SpringBoot MyBatis 实现分页查询数据【SpringBoot系列4】
SpringCloud 大型系列课程正在制作中,欢迎大家关注与提意见。
程序员每天的CV 与 板砖,也要知其所以然,本系列课程可以帮助初学者学习 SpringBooot 项目开发 与 SpringCloud 微服务系列项目开发
1 项目准备
创建SpringBoot基础项目
SpringBoot项目集成mybatis
SpringBoot 集成 Druid 数据源【SpringBoot系列3】
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 中执行请求,已可以实现分页请求
项目源码在这里 :https://gitee.com/android.long/spring-boot-study/tree/master/biglead-api-04-pagehelper
有兴趣可以关注一下公众号:biglead
还没有评论,来说两句吧...