springboot 集成Mybatis 的pageHelper
2020-11-18 本文已影响0人
三也视界
查看pagehelper/Mybatis-PageHelper项目的github,先了解下最新版本
image.png点击maven center可以跳转search.maven.org
找到右侧maven,复制依赖
pom 引入Pagehelper分页插件
<!--集成mybatis pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
这里先跳过如何一步一步的实现流程,我们先来看看上面的依赖带来的问题。
从下面的图片可以看到,查询接口的时候,返回的分页数据明显是不对。总共3条数据,分页第十页,前面跳过90条数据,那么必然是返回空数据的,结果明显是有问题的。
image.png
github上面的依赖用在springboot上可能有点问题,我们需要使用专门的springboot的版本pagehelper-spring-boot-starter插件
在search.maven.org查询pagehelper-spring-boot-starter
从上面查询到最新的版本是1.3.0,pom.xml添加依赖如下:
<!--集成mybatis pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
无数据的时候返回空
image.png
注意上面的分析是基于application.yml中pageHelper的reasonable设置为false的前提下的
reasonable为true,如果存在数据,但是该分页没有数据的时候会返回最后一条数据
配置分页插件
application.yml添加如下几行配置信息
#pageHelper分页插件
pageHelper:
helperDialect: mysql
reasonable: false #如果开启分页优化,在分页的时候如果没有数据,会显示有数据页面的数据
supportMethodsArguments: true
params: count=countSql
使用pageHelper实现分页功能
1.创建UserEntity实体类
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(value = {"password"})
public class UserEntity {
/** 会员级别ID;1->黄金会员;2->白金会员;3->钻石会员;4->普通会员 */
public int memberLevelId ;
/** 用户名 */
public String username ;
/** 密码 */
public String password ;
/** 手机号码 */
public String phone ;
/** 昵称 */
public String nickname ;
/** 帐号启用状态;0->禁用;1->启用 */
public int status ;
/** 注册时间 */
public String createTime ;
}
2.数据操作层Mapper类查询出所有数据
@Repository
public interface UserMapper {
List<UserEntity> getUserList();
}
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" >
<!--<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">-->
<mapper namespace="com.springboot.demo.mapper.UserMapper">
<select id="getUserList" resultType="com.springboot.demo.entity.UserEntity">
SELECT
*
FROM
ums_member
</select>
</mapper>
3、创建业务接口
@Repository
public class UserService {
@Autowired
private UserMapper mUserMapper;
public List<UserEntity> getUserList() {
return mUserMapper.getUserList();
}
}
4、控制层实现分页
工具类
public class DataUtil {
/**
* 获取分页数据
* @param list
* @param <T>
* @return
*/
public static <T>Map<String,Object> getPageData(List<T> list){
PageInfo<T> pageInfo = new PageInfo<>(list);
Map<String, Object> data = new HashMap<>();
data.put("total",pageInfo.getTotal());
data.put("list",pageInfo.getList());
return data;
}
}
PageInfo中的一些我们需要用到的参数如下表:
PageInfo.list | 结果集 |
PageInfo.pageNum | 当前页码 |
PageInfo.pageSize | 当前页面显示的数据条目 |
PageInfo.pages | 总页数 |
PageInfo.total | 数据的总条目数 |
PageInfo.prePage | 上一页 |
PageInfo.nextPage | 下一页 |
PageInfo.isFirstPage | 是否为第一页 |
PageInfo.isLastPage | 是否为最后一页 |
PageInfo.hasPreviousPage | 是否有上一页 |
PageHelper.hasNextPage | 是否有下一页 |
Controller增加分页支持
@RestController
@RequestMapping(value = "/user")
@Api(tags = {"Member"})
public class UserController {
@Autowired
private UserService mUserService;
@ApiOperation(value = "获取用户列表")
@RequestMapping(value = "/users",method = RequestMethod.GET)
public ResponseEntity getUserList(@RequestParam(value = "pageIndex",defaultValue = "1") @ApiParam("起始页码") int pageIndex,
@RequestParam(value = "pageSize",required = true,defaultValue = "10") @ApiParam("每页显示数量") int pageSize){
PageHelper.startPage(pageIndex,pageSize);
List<UserEntity> list = mUserService.getUserList();
return ResponseEntity.success(DataUtil.getPageData(list));
}
}