# 分页

分页底层使用PageHelper插件完成分页操作,所以最简单的操作就是直接使用PageHelper.startPage(...)进行分页。

直接使用PageHelper.startPage(...)是有风险的,因为需要紧跟后面的查询,如果在查询前有拦截器等切面进行其它查询操作时,就被误用了,所以这里是建议使用mybatis-milu提供的分页传参方式。

# 在NamingQuery中分页

interface UserMapper extends BaseMapper<Long, User> {
  @NamingQuery
  private findByCreateTimeGreaterThan(LocalDateTime createTime, Pageable page); // 不需要写SQL
  
  @NamingQuery
  private Optional<User> findByUserName(String userName); // 唯一值查询,表达式,不需要写SQL
}

List<User> users = userMapper.findByCreateTimeGreaterThan(LocalDateTime.parse("2021-01-01T00:00:00"), new PageRequest(1, 10));
// SELECT ... WHERE create_time > ? LIMIT ?

# 在Criteria查询中分页

// Criteria有多种传参方式
  userMapper.findByCriateria(p -> p.limit(1, 10));
  userMapper.findByCriateria(p -> p.limit(1, 10, false)); // 设定不统计总行数
  userMapper.findByCriateria(p -> p.limit(new PageRequest(1, 10));
  userMapper.findByCriateria(p -> p.limitOffset(0, 10)); // 偏移量方式

# 在Example查询中分页

常用就是传Pageable的实例

userService.getByExample(exmaple, new PageRequest(pageNum, pageSize), Sort.desc("createTime"));

如果实体类实现了Pageable,则可以使用实体类设置分页参数进行传参

public class User extends PageRequest { // PageRequest是Pageable的实现类
  @Id
  private Long id;
}

User example = new User();
example.setPageNum(1);
example.setPageSize(10);
userService.getByExample(exmaple);