@Override public ParameterHandler getParameterHandler() { return delegate.getParameterHandler(); } }
@Override public void parameterize(Statement statement) throws SQLException { delegate.parameterize(statement); }
@Override public void batch(Statement statement) throws SQLException { delegate.batch(statement); }
@Override public Object plugin(Object target) { if (target instanceof StatementHandler) { StatementHandler statementHandler = (StatementHandler) target; MetaObject metaStatementHandler = SystemMetaObject.forObject(statementHandler); String sql = statementHandler.getBoundSql().getSql(); Pager pager = Pager.getAndReset(); String newSql = sql; if (sql.trim().toLowerCase().startsWith("select")) { if (pager != null) { newSql = EasyOrmSqlBuilder.getInstance() .getActiveDatabase().getDialect() .doPaging(sql, pager.pageIndex(), pager.pageSize()); } Object queryEntity = statementHandler.getParameterHandler().getParameterObject(); if (queryEntity instanceof QueryParam && ((QueryParam) queryEntity).isForUpdate()) { newSql = newSql + " for update"; } metaStatementHandler.setValue("delegate.boundSql.sql", newSql); } } return Plugin.wrap(target, this); }
@Override public BoundSql getBoundSql() { return delegate.getBoundSql(); }
public RoutingStatementHandler(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) { switch (ms.getStatementType()) { case STATEMENT: delegate = new SimpleStatementHandler(executor, ms, parameter, rowBounds, resultHandler, boundSql); break; case PREPARED: delegate = new PreparedStatementHandler(executor, ms, parameter, rowBounds, resultHandler, boundSql); break; case CALLABLE: delegate = new CallableStatementHandler(executor, ms, parameter, rowBounds, resultHandler, boundSql); break; default: throw new ExecutorException("Unknown statement type: " + ms.getStatementType()); } }
@Override public Statement prepare(Connection connection, Integer transactionTimeout) throws SQLException { return delegate.prepare(connection, transactionTimeout); }
@Override public int update(Statement statement) throws SQLException { return delegate.update(statement); }
@Override public <E> List<E> query(Statement statement, ResultHandler resultHandler) throws SQLException { return delegate.<E>query(statement, resultHandler); }
public StatementHandler newStatementHandler(Executor executor, MappedStatement mappedStatement, Object parameterObject, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) { StatementHandler statementHandler = new RoutingStatementHandler(executor, mappedStatement, parameterObject, rowBounds, resultHandler, boundSql); statementHandler = (StatementHandler) interceptorChain.pluginAll(statementHandler); return statementHandler; }
@Override public <E> Cursor<E> queryCursor(Statement statement) throws SQLException { return delegate.queryCursor(statement); }
@Override public BoundSql getBoundSql() { return delegate.getBoundSql(); }
@Override public Statement prepare(Connection connection, Integer transactionTimeout) throws SQLException { return delegate.prepare(connection, transactionTimeout); }
@Override public ParameterHandler getParameterHandler() { return delegate.getParameterHandler(); } }
@Override public void parameterize(Statement statement) throws SQLException { delegate.parameterize(statement); }
@Override public int update(Statement statement) throws SQLException { return delegate.update(statement); }
@Override public <E> List<E> query(Statement statement, ResultHandler resultHandler) throws SQLException { return delegate.<E>query(statement, resultHandler); }
@Override public void batch(Statement statement) throws SQLException { delegate.batch(statement); }
@Override public <E> Cursor<E> queryCursor(Statement statement) throws SQLException { return delegate.queryCursor(statement); }
if (invocation.getTarget() instanceof StatementHandler) { StatementHandler statementHandler = (StatementHandler) invocation.getTarget(); Pagination<?> pagination = findPaginationParameter(statementHandler.getBoundSql().getParameterObject()); if (pagination == null) return invocation.proceed();