使用版本:3.3.1

重现方式: 开启二级缓存,并使用翻页对象 IPage 当 IPage 使用了排序,排序条件改变的时候,缓存结果不会改变

导致此原因的是 AbstractBaseExecutor 代码中只对 offset = page.getCurrent(); limit = page.getSize(); 进行了 CacheKey 处理 但没有针对 page.orders(); 进行 CacheKey 处理

Comment From: HiJackXD

建议在IPage的default String cacheKey()方法中, 将offset,而不是getCurrent()作为cache值。

好处是可以自定义Ipage,增加setOffset方法并重写offset()(忽略current(),如最后代码块所示),实现 limit x, y 的效果。 【当前及之前的版本,重写offset的值后,缓存失效

 public void setOffset(long offset) {
        this.offset = offset;
    }

    @Override
    public long offset() {
        if (this.offset!=0) {
            return this.offset;
        }
        return super.offset();
    }