springboot的分页实现:使用gitHub插件PageHelper实现mysql数据库查询分页功能

1.pom中引入PageHelper插件的依赖。这里引入的不是单独的PageHelper包,而是整合到springboot后的,由于冗余了mybatis-spring-boot-starter,在项目中如果没有引入mybatis的依赖。这里不用剔除掉。如果上面的pom中引入过,则这里要剔除掉。


            com.github.pagehelper
            pagehelper-spring-boot-starter
            1.2.3
            
                
                    org.mybatis.spring.boot
                    mybatis-spring-boot-starter
                
            
        

这里首先要知道PageHelper支持那些库的分页查询。可以看源码的类了解一下。
springboot的分页实现:使用gitHub插件PageHelper实现mysql数据库查询分页功能_第1张图片
这里默认支持的有Db2,Hsql,Informix,MySql,Oracle,SqlServer常用数据库都包含在内。所以在整合springboot时,需要通过
设置断言来指定用的是啥数据库来执行分页。这里有两种方式:
第一种:在启动类Application.java中初始化指定.这种我不推荐用,而推荐第二种配置方式。

//配置mybatis的分页插件pageHelper
 2     @Bean
 3     public PageHelper pageHelper(){
 4         PageHelper pageHelper = new PageHelper();
 5         Properties properties = new Properties();
 6         properties.setProperty("offsetAsPageNum","true");
 7         properties.setProperty("rowBoundsWithCount","true");
 8         properties.setProperty("reasonable","true");
 9         properties.setProperty("dialect","mysql");    //配置mysql数据库的方言
10         pageHelper.setProperties(properties);
11         return pageHelper;
12     }

第二种:在application.yml配置文件中添加配置

pagehelper:
  helperDialect: mysql
  reasonable: true
  support-methods-arguments: true
  params: count=countSql

这里就正式引入mysql的分页插件PageHelper了
2.下面是代码中的使用。
一般分页放在controller层,需要的分页参数为:pageIndex和pageSize。分页的操作也是通过PageHelper来执行的。List classRooms = classRoomService.getClassRoomListByPage(queryParam);这个方法是正常的条件查询方法。没有分页。执行的sql也没有分页的条件信息:

  
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;



 @RequestMapping(value = "/listByPage")
    public Result> listByPage(@RequestParam(value = "params") String params){
        log.info("[ClassRoomController.listByPage],请求参数为{}",params);
        ClassRoomQueryModel queryParam = ParamUtil.parseAndRequire(ClassRoomQueryModel.class,params,new String[]{"tid"});
        if(queryParam.getPageIndex() == null){
            queryParam.setPageIndex(0);
        }
        if(queryParam.getPageSize() == null){
            queryParam.setPageSize(10);
        }
        PageHelper.startPage(queryParam.getPageIndex(),queryParam.getPageSize(),"create_time desc");
        List  classRooms = classRoomService.getClassRoomListByPage(queryParam);
        PageInfo pageInfo = new PageInfo(classRooms);
        return Result.success(new ResultPage<>(pageInfo.getTotal(),pageInfo.getPages(),pageInfo.getPageNum(),classRooms));
    }

查询出来的分页信息,会放到contoller的统一实体类Result中返回。codeMsg为异常信息的常量类。

package com.zhanglf.catalog.common.result;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

/**
 * @author zhanglf
 * @date 2019-03-19
 */
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class Result {
    /**
     * 返回代码
     */
    private int code;
    /**
     * 返回消息
     */
    private String msg;
    /**
     * 返回数据
     */
    private T data;

    /**
     * 成功时候的调用
     * */
    public static  Result success(T data){
        return new  Result(0,"success",data);
    }
    /**
     * 成功时候的调用
     * */
    public static Result success(){
        return new  Result(0,"success",null);
    }

    /**
     * 失败时候的调用
     * */
    public static  Result error(CodeMsg codeMsg){
        if(codeMsg == null) {
            return null;
        }
        return new Result(codeMsg.getCode(),codeMsg.getMsg(),null);
    }
}

package com.zhanglf.common.result;

import lombok.Getter;

/**
* @Description CodeMsg
* @author zhanglf
* @date 2019/3/19 15:18
*/
@Getter
public class CodeMsg {
    //通用信息
    /** 成功 */
    public static CodeMsg SUCCESS = new CodeMsg(0, "success");
    /** 服务器异常 */
    public static CodeMsg SERVER_ERROR = new CodeMsg(500000,"服务端异常:%s");
    /** 参数校验异常 */
    public static CodeMsg BIND_ERROR = new CodeMsg(500001,"参数校验异常:%s");
    /** 传入参数为空 */
    public static CodeMsg PARAMS_IS_EMPTY = new CodeMsg(500002,"传入参数为空:%s");
    /** 参数解析失败 */
    public static CodeMsg PARAMS_PARSE_ERROR = new CodeMsg(500003,"参数解析失败:%s");
    /** 调用接口异常 */
    public static CodeMsg CALL_API_FAILED = new CodeMsg(500004,"调用接口异常:%s");
    /** 返回参数为空或者不存在数据 */
    public static CodeMsg CALL_API_EMPTY = new CodeMsg(500005,"返回参数为空或者不存在数据:%s");

    /** 返回码 */
    private int code;
    /** 返回信息 */
    private String msg;
    /** 无参构造方法 */
    private CodeMsg() {
    }
    /** 构造方法 */
    private CodeMsg(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    /** 填充动态参数 */
    public CodeMsg fillArgs(Object... args) {
        int code = this.code;
        String message = String.format(this.msg, args);
        return new CodeMsg(code, message);
    }
}

还有一个实体为ResultPage.

package com.zhanglf.catalog.common.result;

import lombok.AllArgsConstructor;
import lombok.Data;

import java.util.List;

/**
 * 封装返回的分页数据
 * @date 2019-03-13
 * @author zhanglf
 * @param  数据类型
 */
@Data
@AllArgsConstructor
public class ResultPage {

    /**
     * 总条数
     */
    private Long totalCount;

    /**
     * 总页数
     */
    private Integer totalPage;

    /**
     * 当前页
     */
    private Integer curPage;

    /**
     * 分页数据
     */
    private List list;
}

你可能感兴趣的:(springboot,PageHelper,分页)