IPage<T> 与 Page<T> 有什么区别?
✅ 一句话区别:
IPage<T>
是接口,Page<T>
是实现类。
实际开发中,一般你用Page<T>
就够了,它是最常用的分页对象。
✅ 对比分析
对比项 | IPage<T> | Page<T> |
---|---|---|
类型 | 接口 | 实现类(implements IPage<T> ) |
用途 | 用于参数接收或返回值接口统一抽象 | 实际使用的分页对象 |
是否可实例化 | ❌ 不可以 | ✅ 可以:new Page<>(1, 10) |
常用场景 | 通用方法接口设计、返回类型约束 | 99% 场景用于分页查询 |
包路径 | com.baomidou.mybatisplus.core.metadata.IPage | com.baomidou.mybatisplus.extension.plugins.pagination.Page |
✅ 常见写法
public IPage<User> queryGroupMembersByGroupId(Integer current, Integer size,String groupId){Page<User> page=new Page<>(current,size);if (groupId==null||groupId.isEmpty()){return null;}QueryWrapper<User> queryWrapper=new QueryWrapper<>();queryWrapper.select("id","name","avatar");queryWrapper.eq("deleted",false);queryWrapper.inSql("id", "select user_id from group_member where group_id = '"+groupId+"'");IPage<User> iPage=userMapper.selectPage(page,queryWrapper);return iPage;}
✅ Page<T>
是 IPage<T>
的标准实现类。
✅ 开发建议
场景 | 推荐使用 |
---|---|
方法内部使用 | Page<T> |
方法返回类型统一 | IPage<T> (好处是更通用、抽象) |
控制层传参分页字段 | 用 Page<T> + @RequestBody 或手动封装 page 、size 字段 |
✅ 总结一句话:
✔ 在调用分页查询时,直接用
Page<T>
创建分页对象就好;
✔ 如果你想让方法返回更灵活、统一、规范分页结果的行为,推荐返回IPage<T>
类型。