310
社区成员




这个作业属于哪个课程 | 软件工程实践-2023学年-W班 |
---|---|
这个作业要求在哪里 | 软件工程实践总结&个人技术博客 |
这个作业的目标 | 个人技术总结 |
其他参考文献 | ... |
在Spring Boot应用中实现MyBatis分页查询,通常借助于PageHelper插件,它简化了分页处理流程。只需在项目中引入PageHelper依赖,配置MyBatis相关设置,然后在Service层调用方法时传入分页参数,PageHelper会自动拦截SQL执行,附加分页语句,从而实现高效、便捷的分页数据查询功能。
Java Bean对象对数据进行分装
@Data
@NoArgsConstructor
@AllArgsConstructor
public class JavaBean {
//总记录数
private Long total;
//当前页数据列表
private List rows;}
创建service层
public interface EmpService {
//page 页码
//pageSize 每页展示记录数
JavaBean page(Integer page, Integer pageSize);
}
创建controller层
@Slf4j
@RestController
@RequestMapping("/emps")
public class EmpController {
@Autowired
private EmpService empService;
//条件分页查询
@GetMapping
public Result page(@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer pageSize) {
//记录日志
log.info("分页查询,参数:{},{}", page, pageSize);
//调用业务层分页查询功能
JavaBean pageBean = empService.page(page, pageSize);
return Result.success(pageBean);
}
}
创建mapper层
@Mapper
public interface EmpMapper {
//获取总记录数
@Select("select count(*) from emp")
public Long count();
//获取当前页的结果列表
@Select("select * from emp limit #{start}, #{pageSize}")
public List<Emp> list(Integer start, Integer pageSize);
}
为Service层提供实现类
@Slf4j
@Service
public class EmpServiceImpl implements EmpService {
@Autowired
private EmpMapper empMapper;
@Override
public JavaBean page(Integer page, Integer pageSize) {
//1、获取总记录数
Long count = empMapper.count();
//2、获取分页查询结果列表
Integer start = (page - 1) * pageSize;
/*
假设每页显示5条数据
则查询第1页的SQL语句为select * from emp limit 0,5;
查询第2页的SQL语句为select * from emp limit 5,5;
查询第3页的SQL语句为select * from emp limit 10,5;
由此可知,开始索引一直在改变 , 每页显示的数据数是固定的
开始索引的计算公式: 开始索引 = (当前页码 - 1) * 每页显示条数
*/
//3、封装JavaBean对象
JavaBean pageBean = new JavaBean(count , empList);
return pageBean;
}
}
引入MyBatis提供的第三方PageHelper分页插件
pom.xml引入依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.6</version>
</dependency>
实例化对象EmpService
@Override
public JavaBean page(Integer page, Integer pageSize) {
// 设置分页参数
PageHelper.startPage(page, pageSize);
// 执行分页查询
List<Emp> empList = empMapper.list(name,gender,begin,end);
// 获取分页结果
Page<Emp> p = (Page<Emp>) empList;
//封装PageBean
JavaBean pageBean = new JavaBean(p.getTotal(), p.getResult());
return pageBean;
}
实例化对象EmpMapper
@Mapper
public interface EmpMapper {
//获取当前页的结果列表
@Select("select * from emp")
public List<Emp> page(Integer start, Integer pageSize);
}
问题一:版本兼容性
Spring Boot和MyBatis以及PageHelper的不同版本之间存在兼容性问题,导致插件无法正常工作或出现异常。
在使用1.5版本的Spring Boot时,整合最新版本的pageHelper会java.lang.NoClassDefFoundError: com/github/pagehelper/PageHelper;报错,整合最新版本的MyBatis也会报错。
解决办法:
使用稳定版本的PageHelper如4.1.0,使用稳定版本的MyBatis如1.3.0
问题二:配置问题
未正确配置PageHelper插件,导致分页功能不生效。
解决方法:
依赖管理中添加PageHelper依赖,在配置文件中设置PageHelper的配置属性
在Spring Boot框架中,实现MyBatis的分页查询是一项核心功能,它对于处理大量数据、提高用户界面友好性至关重要。为了高效地实现这一需求,广泛采用的是PageHelper这一第三方插件。PageHelper作为一个MyBatis的分页插件,无缝集成到Spring Boot项目中,显著简化了分页逻辑的编写。
在实际应用中,开发者无需手动编写复杂的SQL分页语句。当在Service层调用Mapper接口执行查询操作前,只需通过PageHelper的静态方法设置当前页码和每页记录数,如PageHelper.startPage(pageNum, pageSize),该插件便会自动对接下来执行的SQL进行拦截,动态地添加上LIMIT或ROWNUM等分页关键字,从而精确控制返回的数据量。
SpringBoot快速入门
SpringBoot官方文档
SpringBoot整合MyBatis四种常用的分页方式(详细总结)