官方文档中给出了几种分页方式,挨个举例说明一下
IPage<UserVo>selectPageVo(IPage<?> page,Integer state);// or (class MyPage extends Ipage<UserVo>{ private Integer state; })MyPageselectPageVo(MyPage page);// orList<UserVo>selectPageVo(IPage<UserVo> page,Integer state);
这三种 Mybatis Plus 分页方式的区别主要在于传递参数的方式和返回结果的类型。
- IPage selectPageVo(IPage<?> page, Integer state)
这种方式需要传入一个 IPage 对象作为分页参数,其泛型类型可以是任何实体类。方法返回值也是一个 IPage 对象,其中的泛型类型是
UserVo 类型,表示查询结果集。
- MyPage selectPageVo(MyPage page)
这种方式需要传入一个自定义的分页对象 MyPage 作为分页参数,该对象继承了 Mybatis Plus 提供的 IPage
接口,并添加了一个 Integer 类型的 state 属性。方法返回值也是一个 MyPage 对象,其中的泛型类型是 UserVo
类型,表示查询结果集。
- List selectPageVo(IPage page, Integer state)
这种方式需要传入一个 IPage 对象作为分页参数,其中的泛型类型是 UserVo 类型。方法返回值是一个
List 对象,表示查询结果集。
总的来说,这三种方式的核心都是使用 Mybatis Plus 提供的分页插件来实现分页功能,不同的是传递参数和返回结果的方式略有差异。根据实际需要选择合适的方式即可。
下边分别举例子说明下使用方法
1. IPage selectPageVo(IPage<?> page, Integer state)
以查询用户列表为例,假设我们有一个 User 实体类,其中包含了用户的
id、姓名、年龄等属性。我们要实现的功能是查询所有年龄大于指定值的用户列表,并按照 id 升序排列,每页显示 10 条记录。
首先,在 UserMapper 接口中定义一个 selectUserList() 方法,代码如下:
publicinterfaceUserMapperextendsBaseMapper<User>{IPage<UserVo>selectUserList(IPage<?> page,Integer age);}
然后,在 UserService 中调用该方法进行分页查询,代码如下:
@ServicepublicclassUserService{@AutowiredprivateUserMapper userMapper;publicIPage<UserVo>getUserList(Integer pageNum,Integer age){IPage<UserVo> page =newPage<>(pageNum,10,true);
page.setOrderByAsc("id");return userMapper.selectUserList(page, age);}}
这里创建了一个 Page 对象,指定当前页码和每页显示数量,并设置了按照 id 字段升序排序。然后将该 Page 对象作为参数,调用 UserMapper 中的 selectUserList() 方法,获取查询结果。
最后,在 Controller 中接收请求参数并返回结果集,代码如下:
@RestControllerpublicclassUserController{@AutowiredprivateUserService userService;@GetMapping("/users")publicResultgetUsers(@RequestParam(defaultValue ="1")Integer pageNum,@RequestParam(defaultValue ="18")Integer age){IPage<UserVo> userList = userService.getUserList(pageNum, age);returnResult.success(userList);}}
通过以上示例可以发现,该方式需要传入一个 IPage 对象作为分页参数,并且返回的结果集类型是 UserVo。
2. MyPage selectPageVo(MyPage page)
以查询订单列表为例,假设我们有一个 Order 实体类,其中包含了订单的 id、用户
id、订单号等属性。我们要实现的功能是查询指定用户的订单列表,并按照订单生成时间倒序排列,每页显示 20 条记录。
首先,在 OrderMapper 接口中定义一个 selectOrderList() 方法,代码如下:
publicinterfaceOrderMapperextendsBaseMapper<Order>{MyPageselectOrderList(MyPage page,Long userId);}
这里需要使用自定义的分页对象 MyPage,并添加一个 Long 类型的 userId 属性。然后在方法中使用该 userId 属性进行查询,并将查询结果封装到 MyPage 中返回。
然后,在 OrderService 中调用该方法进行分页查询,代码如下:
@ServicepublicclassOrderService{@AutowiredprivateOrderMapper orderMapper;publicMyPagegetOrderList(Long userId,Integer pageNum){MyPage page =newMyPage(pageNum,20);
page.setDesc("create_time");
page.setUserId(userId);return orderMapper.selectOrderList(page, userId);}}
这里创建了一个 MyPage 对象,指定当前页码和每页显示数量,并设置了按照 create_time 字段倒序排序,并将 userId 设置到 MyPage 对象中。然后将该 MyPage 对象作为参数,调用 OrderMapper 中的 selectOrderList() 方法,获取查询结果。
最后,在 Controller 中接收请求参数并返回结果集,代码如下:
@RestControllerpublicclassOrderController{@AutowiredprivateOrderService orderService;@GetMapping("/orders")publicResultgetOrders(@RequestParam(defaultValue ="1")Integer pageNum,@RequestParamLong userId){MyPage orderList = orderService.getOrderList(userId, pageNum);returnResult.success(orderList);}}
通过以上示例可以发现,该方式需要使用自定义的分页对象 MyPage,并且返回的结果集类型是根据 MyPage 泛型类型指定的。
3. List selectPageVo(IPage page, Integer state)
以查询文章列表为例,假设我们有一个 Article 实体类,其中包含了文章的
id、标题、内容等属性。我们要实现的功能是查询所有状态为已发布的文章列表,并按照发布时间倒序排列,每页显示 15 条记录。
首先,在 ArticleMapper 接口中定义一个 selectArticleList() 方法,代码如下:
publicinterfaceArticleMapperextendsBaseMapper<Article>{List<ArticleVo>selectArticleList(IPage<ArticleVo> page,Integer state);}
然后,在 ArticleService 中调用该方法进行分页查询,代码如下:
@ServicepublicclassArticleService{@AutowiredprivateArticleMapper articleMapper;publicIPage<ArticleVo>getArticleList(Integer pageNum){IPage<ArticleVo> page =newPage<>(pageNum,15);
page.setDesc("publish_time");return articleMapper.selectArticleList(page,1);}}
这里创建了一个 Page 对象,指定当前页码和每页显示数量,并设置了按照 publish_time 字段倒序排序。然后将该 Page 对象作为参数,调用 ArticleMapper 中的 selectArticleList() 方法,获取查询结果。
最后,在 Controller 中接收请求参数并返回结果集,代码如下:
@RestControllerpublicclassArticleController{@AutowiredprivateArticleService articleService;@GetMapping("/articles")publicResultgetArticles(@RequestParam(defaultValue ="1")Integer pageNum){IPage<ArticleVo> articleList = articleService.getArticleList(pageNum);returnResult.success(articleList);}}
通过以上示例可以发现,该方式需要传入一个泛型为 ArticleVo 的 IPage 对象作为分页参数,并且返回的结果集类型是 ArticleVo。
版权归原作者 Earth R=6371.393 所有, 如有侵权,请联系我们删除。