package example;
import java.util.List;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
@Intercepts(@Signature(type=Executor.class, method="query",
    args={MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}))
public final class QueryTrace implements Interceptor {
    private final String name;
    private final List<String> events;
    public QueryTrace(String name, List<String> events) { this.name = name; this.events = events; }
    @Override public Object intercept(Invocation invocation) throws Throwable {
        events.add(name + ".before");
        try { return invocation.proceed(); }
        finally { events.add(name + ".after"); }
    }
}
