springboot-mybatis的分页查询的接口
一、安装依赖
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version>
</dependency>
二、代码定义
分页对象类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageBean implements Serializable {// 总记录数private Long total;// 返回参数列表private List rows;}
mapper层
直接查询所有数据即可,剩下的交给分页器
@Mapper
public interface EmpMapper {// 查询部门信息@Select("select * from emp")List<Emp> list();}
业务逻辑层
PageHelper.startPage(page, pageSize);
是 MyBatis 的一个分页插件(PageHelper)提供的方法调用,用于在数据库查询中实现分页功能。这个方法的作用是告诉 PageHelper 开始对接下来的查询进行分页处理。
具体来说,这个方法做了以下几件事情:
-
设置分页参数:它会根据传入的
page
和pageSize
参数,自动计算出数据库查询的起始行号(offset)和每页的记录数(limit)。 -
重写查询语句:在底层,PageHelper 会拦截你的查询语句,自动在原有的查询语句上添加分页参数,从而实现数据库的分页查询。这样,你就无需手动编写复杂的分页查询语句。
-
返回分页结果:分页查询完成后,PageHelper 会将查询结果封装成一个
Page
对象,包含了分页信息和查询结果列表。
@AutowiredEmpMapper empMapper;@Overridepublic PageBean page(Integer page, Integer pageSize) {// 1、设置分页参数PageHelper.startPage(page, pageSize);// 2、执行分页查询语句List<Emp> empList = empMapper.list();// 3、获取分页结果Page<Emp> p = (Page<Emp>) empList;// 4、封装pageBean对象,注意对象需要序列化// p.getTotal() 获取结果条数,p.getResult()获取查询结果PageBean pageBean = new PageBean(p.getTotal(), p.getResult());return pageBean;}
控制层
@ResponseBody@GetMappingpublic Result page( @RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer pageSize){// 传入页码和每页的条数PageBean pageBean = empService.page(page,pageSize);return Result.success(pageBean);}
三、注意实体类需要序列化
依赖
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId>
</dependency>
实体类
import com.fasterxml.jackson.annotation.JsonAutoDetect;@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
public class Emp {// ...
}
如果不序列化,可能产生以下错误:
No serializer found for class com.demo.tliaswebmanagement.pojo.Emp and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)