REQ-3502: fix反射问题
This commit is contained in:
parent
8f0b1bf685
commit
fc3f568be1
@ -18,6 +18,7 @@ import org.apache.ibatis.plugin.Interceptor;
|
||||
import org.apache.ibatis.plugin.Intercepts;
|
||||
import org.apache.ibatis.plugin.Invocation;
|
||||
import org.apache.ibatis.plugin.Signature;
|
||||
import org.apache.ibatis.reflection.DefaultReflectorFactory;
|
||||
import org.apache.ibatis.reflection.MetaObject;
|
||||
import org.apache.ibatis.reflection.SystemMetaObject;
|
||||
import org.springframework.core.Ordered;
|
||||
@ -36,12 +37,13 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||
args = {Connection.class, Integer.class})})
|
||||
public class BeautifulPaginationInterceptor implements Interceptor, Ordered {
|
||||
|
||||
private static final DefaultReflectorFactory REFLECTOR_FACTORY = new DefaultReflectorFactory();
|
||||
private final PaginationInterceptor delegate = new CustomPaginationInterceptor();
|
||||
|
||||
@Override
|
||||
public Object intercept(Invocation invocation) throws Throwable {
|
||||
StatementHandler statementHandler = PluginUtils.realTarget(invocation.getTarget());
|
||||
MetaObject metaObject = SystemMetaObject.forObject(statementHandler);
|
||||
MetaObject metaObject = systemMetaForObject(statementHandler);
|
||||
MappedStatement mappedStatement = (MappedStatement) metaObject.getValue("delegate.mappedStatement");
|
||||
if (SqlCommandType.SELECT != mappedStatement.getSqlCommandType()
|
||||
|| StatementType.CALLABLE == mappedStatement.getStatementType()) {
|
||||
@ -70,7 +72,7 @@ public class BeautifulPaginationInterceptor implements Interceptor, Ordered {
|
||||
private static String tryBuildSql(Invocation invocation) {
|
||||
Connection connection = (Connection) (invocation.getArgs()[0]);
|
||||
StatementHandler statementHandler = PluginUtils.realTarget(invocation.getTarget());
|
||||
MetaObject metaObject = SystemMetaObject.forObject(statementHandler);
|
||||
MetaObject metaObject = systemMetaForObject(statementHandler);
|
||||
MappedStatement mappedStatement = (MappedStatement) metaObject.getValue("delegate.mappedStatement");
|
||||
BoundSql boundSql = (BoundSql) metaObject.getValue("delegate.boundSql");
|
||||
try (PreparedStatement statement = connection.prepareStatement(boundSql.getSql())) {
|
||||
@ -86,6 +88,13 @@ public class BeautifulPaginationInterceptor implements Interceptor, Ordered {
|
||||
}
|
||||
}
|
||||
|
||||
public static MetaObject systemMetaForObject(Object object) {
|
||||
return MetaObject.forObject(object,
|
||||
SystemMetaObject.DEFAULT_OBJECT_FACTORY,
|
||||
SystemMetaObject.DEFAULT_OBJECT_WRAPPER_FACTORY,
|
||||
REFLECTOR_FACTORY);
|
||||
}
|
||||
|
||||
private static class CustomPaginationInterceptor extends PaginationInterceptor {
|
||||
|
||||
public CustomPaginationInterceptor() {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user