介绍:
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;
做好分内之事,希望早日战胜疫情,中国加油,武汉加油!
来源:CSDN
作者:余生一个帆
链接:https://blog.csdn.net/weixin_44146379/article/details/104731024