|
@@ -21,6 +21,7 @@ import org.apache.ibatis.executor.statement.StatementHandler;
|
|
|
import org.apache.ibatis.mapping.BoundSql;
|
|
|
import org.apache.ibatis.mapping.MappedStatement;
|
|
|
import org.apache.ibatis.mapping.ParameterMapping;
|
|
|
+import org.apache.ibatis.reflection.DefaultReflectorFactory;
|
|
|
import org.apache.ibatis.reflection.MetaObject;
|
|
|
import org.apache.ibatis.reflection.SystemMetaObject;
|
|
|
import org.apache.ibatis.session.Configuration;
|
|
@@ -38,6 +39,14 @@ import java.util.Map;
|
|
|
* @since 2017-06-20
|
|
|
*/
|
|
|
public abstract class PluginUtils {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 缓存内置的插件对象反射信息
|
|
|
+ *
|
|
|
+ * @since 3.5.3
|
|
|
+ */
|
|
|
+ public static final DefaultReflectorFactory DEFAULT_REFLECTOR_FACTORY = new DefaultReflectorFactory();
|
|
|
+
|
|
|
public static final String DELEGATE_BOUNDSQL_SQL = "delegate.boundSql.sql";
|
|
|
|
|
|
/**
|
|
@@ -46,12 +55,23 @@ public abstract class PluginUtils {
|
|
|
@SuppressWarnings("unchecked")
|
|
|
public static <T> T realTarget(Object target) {
|
|
|
if (Proxy.isProxyClass(target.getClass())) {
|
|
|
- MetaObject metaObject = SystemMetaObject.forObject(target);
|
|
|
+ MetaObject metaObject = getMetaObject(target);
|
|
|
return realTarget(metaObject.getValue("h.target"));
|
|
|
}
|
|
|
return (T) target;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取对象元数据信息
|
|
|
+ *
|
|
|
+ * @param object 参数
|
|
|
+ * @return 元数据信息
|
|
|
+ * @since 3.5.3
|
|
|
+ */
|
|
|
+ public static MetaObject getMetaObject(Object object) {
|
|
|
+ return MetaObject.forObject(object, SystemMetaObject.DEFAULT_OBJECT_FACTORY, SystemMetaObject.DEFAULT_OBJECT_WRAPPER_FACTORY, DEFAULT_REFLECTOR_FACTORY);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 给 BoundSql 设置 additionalParameters
|
|
|
*
|
|
@@ -68,8 +88,8 @@ public abstract class PluginUtils {
|
|
|
|
|
|
public static MPStatementHandler mpStatementHandler(StatementHandler statementHandler) {
|
|
|
statementHandler = realTarget(statementHandler);
|
|
|
- MetaObject object = SystemMetaObject.forObject(statementHandler);
|
|
|
- return new MPStatementHandler(SystemMetaObject.forObject(object.getValue("delegate")));
|
|
|
+ MetaObject object = getMetaObject(statementHandler);
|
|
|
+ return new MPStatementHandler(getMetaObject(object.getValue("delegate")));
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -116,12 +136,13 @@ public abstract class PluginUtils {
|
|
|
* {@link BoundSql}
|
|
|
*/
|
|
|
public static class MPBoundSql {
|
|
|
+
|
|
|
private final MetaObject boundSql;
|
|
|
private final BoundSql delegate;
|
|
|
|
|
|
MPBoundSql(BoundSql boundSql) {
|
|
|
this.delegate = boundSql;
|
|
|
- this.boundSql = SystemMetaObject.forObject(boundSql);
|
|
|
+ this.boundSql = getMetaObject(boundSql);
|
|
|
}
|
|
|
|
|
|
public String sql() {
|