MyBatis分页插件

Author Avatar
ciky 08月 21,2024
  • 在其它设备中阅读本文章
  • 点击生成二维码

MyBatis分页插件

  • 分页插件的原理:

    首先分页参数放到ThreadLocal中,拦截执行的sql,根据数据库类型添加对应的分页语句重写sql

    例:(select * from table where a) 转化为 (select count(*) from table where a) 和 (select * from table where a limit , )

    计算出了total总条数,pageNum当前第几页,pageSize每页大小当前页的数据,是否为首页,是否为尾页,总页数
    image20240522170527475.png

//分页查询测试
@Autowired
CourseBaseMapper courseBaseMapper;


@Test
public void testCourseBaseMapper()  {
    CourseBase courseBase = courseBaseMapper.selectById(18);
    Assertions.assertNotNull(courseBase);

    //详细进行分页查询的单元测试
    //查询条件
    QueryCourseParamsDto courseParamsDto = new QueryCourseParamsDto();
    courseParamsDto.setCourseName("java");  //课程名称

    //拼装查询条件----------准备(Wrapper<>   实现类LambdaQueryWrapper)
    LambdaQueryWrapper<CourseBase> queryWrapper = new LambdaQueryWrapper<>();
    //根据名称模糊查询like,在sql中拼接course_base.name like '%值%'
    //第一个参数:该参数是一个布尔类型,只有该参数是true时,才将like条件拼接到sql中
    //第二个参数:该参数是数据库中的字段名;
    //第三个参数:该参数值字段值;
    queryWrapper.like(StringUtils.isNotEmpty(courseParamsDto.getCourseName()),
            CourseBase::getName,
            courseParamsDto.getCourseName());
    //根据课程盛和状态查询,在sql中拼接course_base.audit_status = ?
    queryWrapper.eq(StringUtils.isNotEmpty(courseParamsDto.getAuditStatus()),
            CourseBase::getAuditStatus,
            courseParamsDto.getAuditStatus());
    // TODO 按课程发布状态查询

    //分页参数对象------------准备 (当前页码),(每页数量)
    PageParams pageParams = new PageParams();
    pageParams.setPageNo(1L);
    pageParams.setPageSize(2L);

    //创建Page分页参数对象
    //参数:当前页码,每页记录数----------实现(Page<>)---------需要  (当前页码),(每页数量)
    Page<CourseBase> page = new Page<>(pageParams.getPageNo(),pageParams.getPageSize());

    //开始进行分页查询--------------需要(Page<>)  和  (Wrapper<>)
    Page<CourseBase> pageResult = courseBaseMapper.selectPage(page, queryWrapper);

    //数据列表
    List<CourseBase> items = pageResult.getRecords();
    //总记录数
    long total = pageResult.getTotal();

    PageResult<CourseBase> courseBasePageResult = new PageResult<CourseBase>(items,total,pageParams.getPageNo(), pageParams.getPageSize());
    System.out.println(courseBasePageResult);
}