双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

个人技术博客一Spring Boot分页查询MyBatis

2401_83127340 2401_83127340 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
这个作业属于哪个课程 软件工程实践-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四种常用的分页方式(详细总结)

...全文

相关推荐

评论
收藏 已收藏
分享
返回顶部