使用版本: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();
}