之前因为觉得spring cache的使用比较麻烦,所以弄了个简单的
MyBatisCache自动缓存插件,在测试过程中,PageHelper插件的版本变化引出了插件执行顺序的问题:
起因:PageHelper v4.x和v5.x在实现上进行了改变,PageHelper主要是拦截Executor的query方法,为select语句添加物理分页语句,问题就出在query方法上,query方法有两个:
1,<E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, CacheKey cacheKey, BoundSql boundSql) throws SQLException;
2,<E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler) throws SQLException;
起因:PageHelper v4.x和v5.x在实现上进行了改变,PageHelper主要是拦截Executor的query方法,为select语句添加物理分页语句,问题就出在query方法上,query方法有两个:
1,<E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, CacheKey cacheKey, BoundSql boundSql) throws SQLException;
2,<E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler) throws SQLException;
两个方法参数不一样,其中第一个方法是被第二个方法座位内部调用,所以一般mybatis的插件对于Executer的query拦截都是拦截的第二个方法,包括PageHelper在v5之前也都是这么拦截的,所以在通常情况下插件执行顺序是这样的:
<property name="pl