@Override public <E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler) throws SQLException { BoundSql boundSql = ms.getBoundSql(parameter); CacheKey key = createCacheKey(ms, parameter, rowBounds, boundSql); return query(ms, parameter, rowBounds, resultHandler, key, boundSql); }
@Override public <E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler) throws SQLException { BoundSql boundSql = ms.getBoundSql(parameter); CacheKey key = createCacheKey(ms, parameter, rowBounds, boundSql); return query(ms, parameter, rowBounds, resultHandler, key, boundSql); }
@SuppressWarnings("rawtypes") @Override public Object intercept(Invocation invocation) throws Throwable { Executor executor = (Executor)invocation.getTarget(); Object[] args = invocation.getArgs(); MappedStatement ms = (MappedStatement)args[0]; Object parameterObject = args[1]; RowBounds rowBounds = (RowBounds)args[2]; ResultHandler resultHandler = (ResultHandler)args[3]; BoundSql boundSql = ms.getBoundSql(parameterObject); CacheKey pageKey = null, countKey = null; if(executor instanceof CachingExecutor){ pageKey = ((CachingExecutor)executor).createCacheKey(ms, parameterObject, rowBounds, boundSql); countKey = ((CachingExecutor)executor).createCacheKey(ms, parameterObject, rowBounds, boundSql); } else { pageKey = ((BaseExecutor)executor).createCacheKey(ms, parameterObject, rowBounds, boundSql); countKey = ((BaseExecutor)executor).createCacheKey(ms, parameterObject, rowBounds, boundSql); } countKey.update("Count"); BoundSql countSql = new BoundSql(ms.getConfiguration(), "select count(*) from (" + boundSql.getSql() + ") temp", boundSql.getParameterMappings(), parameterObject); Object r2 = executor.query(ms, parameterObject, rowBounds, resultHandler, pageKey, boundSql); MappedStatement countMs = newMappedStatement(ms, Long.class); Object r1 = executor.query(countMs, parameterObject, rowBounds, resultHandler, countKey, countSql); System.out.println(r1); return r2; }
public List query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler) throws SQLException { ErrorContext.instance().resource(ms.getResource()).activity("executing a query").object(ms.getId()); if (closed) throw new ExecutorException("Executor was closed."); List list; try { queryStack++; CacheKey key = createCacheKey(ms, parameter, rowBounds); final List cachedList = (List) localCache.getObject(key); if (cachedList != null) { list = cachedList; } else { localCache.putObject(key, EXECUTION_PLACEHOLDER); try { list = doQuery(ms, parameter, rowBounds, resultHandler); } finally { localCache.removeObject(key); } localCache.putObject(key, list); } } finally { queryStack--; } if (queryStack == 0) { for (DeferredLoad deferredLoad : deferredLoads) { deferredLoad.load(); } } return list; }