MyBatis分页插件
MyBatis分页插件
-
分页插件的原理:
首先分页参数放到ThreadLocal中,拦截执行的sql,根据数据库类型添加对应的分页语句重写sql
例:(select * from table where a) 转化为 (select count(*) from table where a) 和 (select * from table where a limit , )
计算出了total总条数,pageNum当前第几页,pageSize每页大小和当前页的数据,是否为首页,是否为尾页,总页数等
//分页查询测试
@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);
}