一、PageHelper分页插件
1、springboot配置pagehelper5.x和4.x的区别
pagehelper5.x 使用的拦截器是 PageInterceptor,pagehelper4.x 使用的拦截器是PageHelper,而且 5.x 的版本去除了 sqlsource 模块的好几个类 OrderByStaticSqlSource 、PageSqlSource 、PageRawSqlSource 、PageStaticSqlSource 、PageDynamicSqlSource 、PageProviderSqlSource ,pagehelper4.x 版本切到pagehelper5.x 需要注意这个问题。
2、PageHelper中默认PageInfo的成员变量
public class PageInfo<T> implements Serializable {
//当前页
private int pageNum;
//每页的数量
private int pageSize;
//当前页的数量
private int size;
//由于startRow和endRow不常用,这里说个具体的用法
//可以在页面中"显示startRow到endRow 共size条数据"
//当前页面第一个元素在数据库中的行号
private int startRow;
//当前页面最后一个元素在数据库中的行号
private int endRow;
//总记录数
private long total;
//总页数
private int pages;
//结果集
private List<T> list;
//第一页
private int firstPage;
//前一页
private int prePage;
//是否为第一页
private boolean isFirstPage = false;
//是否为最后一页
private boolean isLastPage = false;
//是否有前一页
private boolean hasPreviousPage = false;
//是否有下一页
private boolean hasNextPage = false;
//导航页码数
private int navigatePages;
//所有导航页号
private int[] navigatepageNums;
}
二、springboot使用pagehelper4.x
1、引入依赖,配置pom.xml
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.5</version>
</dependency>
2、使用原始PageHelper+mybatis.cfg.xml配置
A、yml文件新增一条配置
# mybatis配置
mybatis:
# 注入mybatis的核心配置
config-location: classpath:mybatis.cfg.xml
B、在mybatis.cfg.xml中配置拦截器
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<!-- 设置实体类的别名 -->
<package name="com.pingan.core.entity"/
</typeAliases>
<!-- 配置mybatis的分页插件PageHelper -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 设置数据库类型Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库 -->
<!--指明数据库 4.0.0以后不需要设置此属性-->
<property name="dialect" value="mysql"/>
<!-- 该参数默认为false -->
<!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
<!-- 和startPage中的pageNum效果一样-->
<property name="offsetAsPageNum" value="true"/>
<!-- 该参数默认为false -->
<!-- 设置为true时,使用RowBounds分页会进行count查询 -->
<property name="rowBoundsWithCount" value="true"/>
<!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
<!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
<property name="pageSizeZero" value="true"/>
<!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
<!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
<!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
<property name="reasonable" value="true"/>
<!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
<!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
<!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 -->
<!-- 不理解该含义的前提下,不要随便复制该配置 -->
<property name="params" value="pageNum=start;pageSize=limit;"/>
<!-- 支持通过Mapper接口参数来传递分页参数 -->
<property name="supportMethodsArguments" value="true"/>
<!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->
<property name="returnPageInfo" value="check"/>
</plugin>
</plugins>
</configuration>
C、方式二,使用配置类的方式配置
import com.github.pagehelper.PageHelper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
@Configuration
public class pageHelperConfig {
@Bean
public PageHelper pageHelper() {
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("offsetAsPageNum","true");
properties.setProperty("rowBoundsWithCount","true");
properties.setProperty("reasonable","true");
properties.setProperty("dialect","mysql"); //配置mysql数据库的方言
pageHelper.setProperties(properties);
return pageHelper;
}
}
D、Mapper、service、serviceImpl、controller配置
Mapper.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" >
<mapper namespace="com.itan.ProgramInfoMapper">
<select id="getAllProgramInfoList" resultMap="com.itan.ProgramInfo">
select * from program_info
</select>
</mapper>
<!-- Mapper接口-->
public interface ProgramInfoMapper {
/**
* 获取所有ProgramInfo列表
* @return ProgramInfo列表
*/
public List<ProgramInfo> getAllProgramInfoList();
}
<!-- Service接口 -->
public interface ProgramInfoService {
/**
* 分页显示list列表
* @param page 当前页
* @param size 每一页显示条数
* @return
*/
public PageInfo<ProgramInfo> list(int page,Integer size);
}
<!-- serviceImpl实现类 -->
@Service("programInfoService")
public class ProgramInfoServiceImpl implements ProgramInfoService {
@Resource
private ProgramInfoMapper programInfoMapper;
@Override
public PageInfo<ProgramInfo> list(int page, Integer size) {
PageHelper.startPage(page,size);
List<ProgramInfo> list = programInfoMapper.getAllProgramInfoList();
return new PageInfo<ProgramInfo>(list);
}
}
<!-- controller控制器 -->
@RestController
@RequestMapping("/programinfo")
public class ProgramInfoController {
@Autowired
private ProgramInfoService programInfoService;
/**
* 获取所有ProgramInfo列表
* @return
*/
@GetMapping("/list")
public void getProgramInfoList(@RequestBody ProgramInfoVo programInfoVo){
PageInfo<ProgramInfo> list = programInfoService.list(programInfoVo.getPage(), programInfoVo.getLimit());
for(User user:list){
System.out.println(user);
}
}
}
E、测试
三、springboot使用pagehelper5.x
1、引入依赖,配置pom.xml
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.10</version>
</dependency>
2、使用原始PageHelper+mybatis.cfg.xml配置
A、yml文件新增一条配置
# mybatis配置
mybatis:
# 注入mybatis的核心配置
config-location: classpath:mybatis.cfg.xml
B、在mybatis.cfg.xml中配置拦截器
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<!-- 设置实体类的别名 -->
<package name="com.pingan.core.entity"/
</typeAliases>
<!-- 配置mybatis的分页插件PageHelper -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 设置数据库类型Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库 -->
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
</configuration>
C、方式二,使用配置类的方式配置
import com.github.pagehelper.PageHelper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
@Configuration
public class pageHelperConfig {
@Bean
public PageInterceptor pageInterceptor() {
return new PageInterceptor();
}
}
D、Mapper、service、serviceImpl、controller配置
Mapper.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" >
<mapper namespace="com.itan.ProgramInfoMapper">
<select id="getAllProgramInfoList" resultMap="com.itan.ProgramInfo">
select * from program_info
</select>
</mapper>
<!-- Mapper接口-->
public interface ProgramInfoMapper {
/**
* 获取所有ProgramInfo列表
* @return ProgramInfo列表
*/
public List<ProgramInfo> getAllProgramInfoList();
}
<!-- Service接口 -->
public interface ProgramInfoService {
/**
* 分页显示list列表
* @param page 当前页
* @param size 每一页显示条数
* @return
*/
public PageInfo<ProgramInfo> list(int page,Integer size);
}
<!-- serviceImpl实现类 -->
@Service("programInfoService")
public class ProgramInfoServiceImpl implements ProgramInfoService {
@Resource
private ProgramInfoMapper programInfoMapper;
@Override
public PageInfo<ProgramInfo> list(int page, Integer size) {
PageHelper.startPage(page,size);
List<ProgramInfo> list = programInfoMapper.getAllProgramInfoList();
return new PageInfo<ProgramInfo>(list);
}
}
<!-- controller控制器 -->
@RestController
@RequestMapping("/programinfo")
public class ProgramInfoController {
@Autowired
private ProgramInfoService programInfoService;
/**
* 获取所有ProgramInfo列表
* @return
*/
@GetMapping("/list")
public void getProgramInfoList(@RequestBody ProgramInfoVo programInfoVo){
PageInfo<ProgramInfo> list = programInfoService.list(programInfoVo.getPage(), programInfoVo.getLimit());
for(User user:list){
System.out.println(user);
}
}
}
E、测试
四、pageHelper—stater
1、引入依赖,不需要配置类
<!-- 引入pagehelper-spring-boot-starter采用的是pagehelper5.0版本 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
2、controller
@RestController
@RequestMapping("/programinfo")
public class ProgramInfoController {
@Autowired
private ProgramInfoService programInfoService;
/**
* 获取所有ProgramInfo列表
* @return
*/
@GetMapping("/list")
public void getProgramInfoList(@RequestBody ProgramInfoVo programInfoVo){
PageInfo<ProgramInfo> list = programInfoService.list(programInfoVo.getPage(), programInfoVo.getLimit());
for(User user:list){
System.out.println(user);
}
}
}