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

052103118_赵心雨 2024-06-03 20:06:13
这个作业属于哪个课程 软件工程实践-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四种常用的分页方式(详细总结)

...全文
111 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

310

社区成员

发帖
与我相关
我的任务
社区描述
福州大学的软件工程实践-2023学年-W班
软件工程需求分析结对编程 高校 福建省·福州市
社区管理员
  • FZU_SE_teacherW
  • Pity·Monster
  • 助教张富源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧