当前使用版本(必须填写清楚,否则不予处理)
mybatis-plus 3.3.1
该问题是怎么引起的?(最新版上已修复的会直接close掉)
现实中遇到的业务需求 有时候希望溢出总页数后显示第一页 有时候想显示最后一页 (就是这么操蛋)
我的初步解决方案
先创建创建处理类型枚举类
@AllArgsConstructor
public enum OverflowType {
NONE("不做任何处理"),
FIRST("查询第一页"),
LAST("查询最后一页"),
EXCEPTION("抛出异常");
private String desc;
}
然后把对应的处理类型把OverflowType存入到ThreadLocal
最后我重写PaginationInterceptor.handlerOverflow(IPage<?> page)方法,从ThreadLocal取出OverflowType值,再做对应处理
存在的问题
因为是使用了ThreadLocal做值传递,不能保证百分百的可用性和安全性;
优化建议,实现起来十分简单有效
- 将溢出处理方式改成
pega的属性传入 PaginationInterceptor中的overflow变成defaultOverflowType,即全局默认处理方式- 修改
PaginationInterceptor的处理逻辑
相关代码
page
public class Page<T> implements IPage<T> {
......
//溢出处理方式
private OverflowType overflowType;
......
PaginationInterceptor
page.setTotal(total);
if (page.getCurrent() > page.getPages()) {
OverflowType overflowType = Optional.ofNullable(page.getOverflowType)
.orElse(this.defaultOverflowType);
switch (overflowType ) {
case ...:
....;
break;
case ...:
....;
break;
case ...:
....;
break;
case ...:
....;
break;
default:
....;
}
}
Comment From: nieqiurong
自行实现IPage接口和覆写分页插件方法实现.