MyBatis-Plus分页插件IPage的使用展示------分页查询
使用了Mybatis-plus的分页插件----IPage: IPage 需要在dao层传入IPage的实现类Page对象,该对象实现了IPage IPage内部原理是基于拦截器,拦截的是方法以及方法中的参数,会判断是否是查询操作。如果是查询操作,才会进入分页的逻辑处理。 进入分页的逻辑处理后,拦截器会通过反射获取该方法的参数进行判断是否存在IPage对象的实现类。如果不存在就不进行分页,存在则将该参数赋值给IPage对象。 然后进行拼接sql处理完成分页操作。 但是使用IPage需要注入一个Bean拦截器交给spring进行管理,否则不会进行拦截。 (注:MP另一个分页插件是PageHelper,不在此详细解释) service:
IPage<ESlideshow> getAll(IPage<Object> page);
serviceImpl:
@Override public IPage<ESlideshow> getAll(IPage<Object> page) { IPage<ESlideshow> eSlideshowIPage= eSlideshowMapper.getAllPage(page); return eSlideshowIPage; }
mapper:
@Select("SELECT * FROM e_slideshow WHERE is_deleted =0") IPage<ESlideshow> getAllPage(IPage<Object> page);
controller:
@GetMapping("/all") public Result<Object> getAll(PageVO pageVO){ IPage<ESlideshow> all=eSlideshowService.getAll(pageVO.buildPage()); return Result.success(all); }
PageVO:
@Data @ApiModel(value = "分页", description = "orders传参实例:[{column: create_time,asc: false},{column: name,asc: " + "true}]") public class PageVO { /** * 当前页 */ @ApiModelProperty(value = "当前页") private Integer current; /** * 当前页显示数据的条数 */ @ApiModelProperty(value = "当前页显示数据的条数") private Integer size; /** * 获取排序信息,排序的字段和正反序 */ @ApiModelProperty(value = "排序方式。(默认【创建时间倒序】:[{column: create_time,asc: false}])。", notes = "例子:[{column: create_time,asc: false},{column:name,asc: true}]" ) private String orders; /** * 当前页默认值为1 */ public Integer getCurrent() { return current = (current == null || current <= 0) ? 1 : current; } /** * 每页大小默认为10 */ public Integer getSize() { return size = (size == null || size == 0) ? 10 : size; } /** * description:将orders(json数组字符串)转为List */ public List<OrderItem> generateOrderList() { List<OrderItem> orderItemList = new ArrayList<>(); if (StrUtil.isBlank(getOrders())) { orderItemList.add(OrderItem.desc("create_time")); } else { try { orderItemList = JSONArray.parseArray(orders, OrderItem.class); } catch (Exception e) { throw new BadRequestException("分页排序参数orders不合法,请传正确的参数格式——[column:,asc:true/false]"); } } return orderItemList; } /** * description:根据pageVO构建分页查询IPage * @return IPage查询条件 */ public <K> IPage<K> buildPage() { Page<K> page = new Page<>(getCurrent(), getSize()); page.addOrder(generateOrderList()); return page; } }
上一篇:
IDEA上Java项目控制台中文乱码