天天看點

PageHelper在springboot中的使用

PageHelper的使用方法

第一步、導入相對應的坐标和包

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>${pagehelper.version}</version>
</dependency>      

第二步、配置檔案的配置

pagehelper:
  helper-dialect: mysql
  reasonable: true
  support-methods-arguments: true
  params:      

參數解釋:

helper-dialect:指定資料庫,不指定的話會預設自動檢測資料庫類型

reasonable:是否啟用分頁合理化。如果啟用,當pagenum<1時,會自動查詢第一頁的資料,當pagenum>pages時,自動查詢最後一頁資料;不啟用的,以上兩種情況都會傳回空資料

support-methods-arguments:預設值false,分頁插件會從查詢方法的參數值中,自動根據上面 params 配置的字段中取值,查找到合适的值時就會自動分頁。(copy來的,因為我也不知道怎麼去解釋)

params:用于從對象中根據屬性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用預設值, 預設值為pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero

第三步、方法調用

使用PageHelper.startPage 靜态方法調用startPage :

特點:

  1. 靜态方法,傳遞兩個參數(目前頁碼,每頁查詢條數)
  2. 使用pageHelper 分頁的時候,不再關注分頁語句,查詢全部的語句
  3. 自動的對PageHelper.startPage 方法下的第一個sql 查詢進行分頁

    PageHelper.startPage(1,5);

    //緊跟着的第一個select 方法會被分頁

    List list = countryMapper.findAll();

也就是說再Service層PageHelper.startPage(1,5);語句後一定是緊跟查詢語句。

方法一:使用service查詢到的結果存儲在request域中

private void selectAllUsers(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {

        String num=request.getParameter("num");

        if(null==num)
        {
            num="1";
        }

        // Page PageInfo

        Page<?> page=PageHelper.startPage(Integer.parseInt(num),5);  //設定第幾條記錄開始,多少條記錄為一頁

        //通過userService擷取user的資訊,其sql語句為"select * from user" 但因pagehelp已經注冊為插件,是以pagehelp會在原sql語句上增加limit,進而實作分頁
        List<Person> persons=userService.getAllUsersBypageHelper();  //因而獲得的是分好頁的結果集
         
        PageInfo<?> pageHelper=page.toPageInfo(); //擷取頁面資訊的對象,裡面封裝了許多頁面的資訊 如:總條數,目前頁碼,需顯示的導航頁等等
           request.setAttribute("persons",persons);     request.setAttribute("pagehelper",pageHelper);
       request.getRequestDispatcher("/persons.jsp").forward(request,response);

    }

方法二:使用service查詢到的結果存儲在自定義的類中然後傳回給前端
 public PageResult<List<ProjectListVO>> queryByProjectName(Integer pageNo, Integer pageSize, String projectName) {
        PageResult<List<ProjectListVO>> result = new PageResult<>();
        try {
            PageHelper.startPage(pageNo, pageSize);
            List<ProjectListVO> projectVOList = projectMapper.queryByProjectName(projectName); //設定完上邊的PageHelper之後查詢的時候,查詢語句會自動加入 limits startpage   count,查詢結果就是正确的結果
            PageInfo<ProjectListVO> pageInfo = new PageInfo<>(projectVOList);
            result.setTotal(pageInfo.getTotal());
            result.setPages(pageInfo.getPages());
            result.setCurrent(pageInfo.getPageNum());
            result.setSize(pageInfo.getPageSize());
            result.setResult(projectVOList);
            result.success("查詢成功!");
        } finally {
            PageHelper.clearPage();
        }

        return result;
    }      

第四步、關于controller中的使用

@ApiOperation("根據項目名查詢項目資訊")
    @RequestMapping(value = "/queryByProjectName", method = RequestMethod.GET)
    public PageResult<List<ProjectListVO>> queryByProjectName(@RequestParam(defaultValue = "1", value = "pageNo") Integer pageNo,
                                                              @RequestParam(defaultValue = "10", value = "pageSize") Integer pageSize,
                                                              @RequestParam(name = "projectName") String projectName) {
        if (StringUtils.isEmpty(projectName)) {
            throw new DareException("參數錯誤!");
        }
        PageResult<List<ProjectListVO>> result = new PageResult<>();
        try {
            projectName = "%" + projectName + "%";
//            System.out.println(projectName);
            result = projectService.queryByProjectName(pageNo, pageSize, projectName);
        } catch (Exception e) {
            e.printStackTrace();
            log.error(e.getMessage());
            result.setSuccess(false);
            result.setMessage("操作失敗!");
        }
        return result;
    }