# 分页
分页底层使用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);
← 主键生成器 自动创建实体ResultMap →