Spring boot

springboot 集成Mybatis 的pageHelper

2020-11-18  本文已影响0人  三也视界

查看pagehelper/Mybatis-PageHelper项目的github,先了解下最新版本

image.png

点击maven center可以跳转search.maven.org

image.png

找到右侧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

image.png
从上面查询到最新的版本是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));
    }
}
上一篇下一篇

猜你喜欢

热点阅读