在springboot项目中使用分页插件非常简单,不需要我们手动配置拦截器等。正文开始。
首先pom.xml文件导入pagehelper依赖。我的springboot版本是2.4.4,所以使用的是最新版本的pagehelper。(其他版本可尝试:1.2.5,1.2.10等)。
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
注意:这里添加的是pagehelper-spring-boot-starter(不是pagehelper),它会多出两个包,无需我们手动配置。
mybatis配置文件
<!-- 分页插件-->
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名(不用改) -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
<property name="reasonable" value="true"/>
</plugin>
</plugins>
常用配置
#分页pageHelper
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
pageSizeZero: false
参数解释:
编写Mapper接口
@Mapper
public interface UserMapper {
//查询全部方法
List<User> selectAll();
}
对应的Mapper文件
<?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.demo.Mapper.UserMapper">
<select id="selectAll" resultType="User">
select * from user
</select>
</mapper>
service接口
public interface UserService {
//两个分页方法,pageNum参数表示查询第几页,pageSize表示每页的条数
//这个方法只返回分页后的查询数据部分,即这里的分页查询的User列表
List<User> findAllUserByPageL(int pageNum, int pageSize);
//这个方法会返回分页后的所有信息,后文结果可对比
PageInfo<User> findAllUserByPageP(int pageNum, int pageSize);
}
service实现类
@Service
public class UserServiceIpml implements UserService {
@AutoWired
private UserMapper userMapper;
@Override
public List<User> findAllUserByPageL(int pageNum, int pageSize){
PageHelper.startPage(pageNum, pageSize);
List<User> lists = userMapper.selectAll();
return lists;
}
@Override
public PageInfo<User> findAllUserByPageP(int pageNum, int pageSize){
PageHelper.startPage(pageNum, pageSize);
List<User> lists = userMapper.selectAll();
PageInfo<User> pageInfo = new PageInfo<User>(lists);
System.out.println(pageInfo);
return pageInfo;
}
}
注意:PageHelper.startPage(pageNum, pageSize);这条语句一定要放在你需要分页的查询语句之前,因为它只会对它接下来的第一条查询语句进行分页处理。所以可以看到这里把它和需要分页的查询的语句紧挨着。
controller类
@RestController
public class UserController {
@Autowired
private UserServiceIpml userServiceIpml;
@GetMapping("/testPageHelper1")
public List<User> testPageHelper1(){
List<User> queryResult = userServiceIpml.findAllUserByPageL(2, 2);
return queryResult;
}
@RequestMapping(value = "/testPageHelper2", method = RequestMethod.GET)
public PageInfo<User> testPageHelper2(@RequestParam int currentPage, @RequestParam int pageSize){
PageInfo<User> queryResult = userServiceIpml.findAllUserByPageP(currentPage, pageSize);
return queryResult;
}
}
通过http://localhost:8080/testPageHelper1可以看到返回的仅仅是分页查询的数据,根据输入参数返回第二页数据,每页显示两条。如果前端只需要获取分页数据可使用方法1
通过http://localhost:8080/testPageHelper2?currentPage=1&pageSize=2 访问方法2返回的是分页所有信息,可以看到根据传入参数查询第一页,每页显示两条。如果前端需要使用分页的其它参数可以使用方法2
总结重点:
1.引入正确的依赖pagehelper-spring-boot-starter
2.PageHelper.startPage(pageNum, pageSize);一定要放在需要分页查询的查询语句之前
3.如果上述两点没有问题,但显示结果始终是全部数据,在yml文件中加上配置pageSizeZero: false