Mybatis分页插件一一PageHelper

为君一笑 提交于 2020-03-09 02:25:19

Mybatis分页插件一一PageHelper

介绍:

com.github.pagehelper.PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件;他的原理是利用mybatis拦截器,在查询数据库的时候,拦截下SQL,然后进行修改,从而实现分页(如果你硬是想知道原理,mybatis拦截器,学习过后你就知道什么回事了)。
优点:无需你自己去封装以及关心sql分页等问题,使用很方便,前端取数据也很方便。

使用:

引入依赖:

	    <!--导入pagehelper相关依赖-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.2</version>
        </dependency>
        <!--如果你的项目是springboot,需添加下面两个依赖-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-autoconfigure</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.3</version>
        </dependency>

在配置文件中添加配置(此处配置有两种方式,我们二选其一即可):
1.在yml配置文件中配置:


# 配置pagehelper参数
pagehelper:
  helperDialect: mysql
  reasonable: true
  supportMethodsArguments: true
  params: count=countSql
  

2.使用代码配置:创建一个Bean对象,当jvm启动时会被加载读取该代码

package com.style.config;

import com.github.pagehelper.PageHelper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Properties;

/**
 * @author xf
 * PageHelper配置
 */
@Configuration
public class PageHelperConfig {
    //配置mybatis的分页插件pageHelper
    @Bean
    public PageHelper pageHelper(){
        PageHelper pageHelper = new PageHelper();
        Properties properties = new Properties();
        /**
         *设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用
         */
        properties.setProperty("offsetAsPageNum","true");
        /**
         *设置为true时,使用RowBounds分页会进行count查询
         */
        properties.setProperty("rowBoundsWithCount","true");
        properties.setProperty("reasonable","true");
        properties.setProperty("dialect","mysql");
        pageHelper.setProperties(properties);
        return pageHelper;
    }
}

(配置二选其一即可,本人还是比较喜欢使用配置文件进行配置)
控制层代码:


    /**
     * 查询语言列表(分页)
     * @param
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/getLanguageList",method = RequestMethod.GET)
    public ApiResult getLanguageList(@RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
                                     @RequestParam(value = "pageSize", defaultValue = "10") int pageSize){
        Object languageList = languageService.getLanguageList(pageNum, pageSize);
        return ApiResult.build(Code.Code_Success.getName(),Code.Code_Success.getValue(),languageList);
    }
    

接口:


    Object getLanguageList(int pageNum,int pageSize);

接口实现类:


    @Override
    public Object getLanguageList(int pageNum,int pageSize) {
        //pageNum:表示第几页  pageSize:表示一页展示的数据
        //使用分页插件,最核心的一句,即开启分页
        PageHelper.startPage(pageNum,pageSize);
        List<Language> languageList = languageMapper.getLanguageList();
        PageInfo<Language> pageInfo = new PageInfo<>(languageList);
        Map<String, Object> data = new HashMap<>();
        data.put("total_size",pageInfo.getTotal());//总条数
        data.put("total_page",pageInfo.getPages());//总页数
        data.put("current_page",pageNum);//当前页
        data.put("data",pageInfo.getList());//数据
        return data;
    }

接口调用:
在这里插入图片描述
捕捉PageHelper分页查询执行的sql:在这里插入图片描述
原理:其实还是limit分页。只不过不需要我们在sql中写limit,而是PageHelper拦截了我们的sql帮我们拼接上去了limit;

做好分内之事,希望早日战胜疫情,中国加油,武汉加油!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!