需求分析
当数据库中数据非常多时, 需要将数据以分页的形式展示在页面上, 对于Mybatis来说可以通过主流的PageHelper分页插件简化代码
参数分析
-- 分页查询语句
SELECT * FROM table LIMIT 0,10
起始索引计算公式 : 起始索引 = (当前页码 - 1) * 每页记录数
参数 :
- 前端请求参数
- 当前页码 page
- 每页显示条数 pageSize
- 后端响应参数
- 查询到的数据列表 rows (List集合)
- 总记录数 total
通常会把响应的两个参数封装到PageBean对象中, 并以json格式响应给前端
PageHelper使用说明
-
使用PageHelper插件进行分页, 无需在Mapper层进行手动分页查询, 也就是说查询语句中可以省去 LIMIT
-
我们只需在Service层调用Mapper方法前通过PageHelper设置好分页参数, 再调用Mapper方法, 返回的就是包装好的Page对象
-
Page对象本质上就是一个集合, 可以通过其提供的get方法获取数据
- getTotal 获取总记录数
- getResult 获取数据列表
准备工作
- pom.xml 里导入分页插件依赖
<!--PageHelper分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.2</version>
</dependency>
- 创建PageBean实体类
@Data
public class PageBean {
/**
* 总记录数
*/
private Long total;
/**
* 数据列表
*/
private List rows;
}
代码实现
- Mapper层
@Mapper
public interface FindByPageMapper {
//获取当前页的结果列表
@Select("select * from table")
public Page findByPage();
}
- Service层
/**
* service实现类
*/
@Service
public class FindByPageServiceImpl implements FindByPageService {
// 注入bean对象
@Autowired
private FindByPageService findByPageService ;
@Override
public PageBean findByPage(Integer page, Integer pageSize) {
// 设置分页参数 (当前页码, 每页显示条数)
PageHelper.startPage(page,pageSize);
// 直接跟查询语句 (Page对象本质上是一个集合)
Page pageRuesult = findByPageMapper.findByPage();
// 包装分页结果 (获取Page对象中的total和result并存入)
PageBean pageBean = new PageBean<>(pageRuesult.getTotal(),pageRuesult.getResult());
return pageBean;
}
}