当前使用版本(必须填写清楚,否则不予处理)

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做值传递,不能保证百分百的可用性和安全性;

优化建议,实现起来十分简单有效

  1. 将溢出处理方式改成pega的属性传入
  2. PaginationInterceptor中的overflow变成defaultOverflowType,即全局默认处理方式
  3. 修改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接口和覆写分页插件方法实现.