|
@@ -17,6 +17,7 @@ package com.baomidou.mybatisplus.extension.handlers;
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
+import org.apache.ibatis.executor.statement.CallableStatementHandler;
|
|
|
import org.apache.ibatis.executor.statement.StatementHandler;
|
|
|
import org.apache.ibatis.reflection.MetaObject;
|
|
|
import org.apache.ibatis.reflection.SystemMetaObject;
|
|
@@ -48,33 +49,40 @@ public abstract class AbstractSqlParserHandler {
|
|
|
* 拦截 SQL 解析执行
|
|
|
*/
|
|
|
protected void sqlParser(MetaObject metaObject) {
|
|
|
- Object originalObject = metaObject.getOriginalObject();
|
|
|
- StatementHandler statementHandler = PluginUtils.realTarget(originalObject);
|
|
|
- metaObject = SystemMetaObject.forObject(statementHandler);
|
|
|
if (null != metaObject) {
|
|
|
- if (null != this.sqlParserFilter && this.sqlParserFilter.doFilter(metaObject)) {
|
|
|
- return;
|
|
|
+ Object originalObject = metaObject.getOriginalObject();
|
|
|
+ StatementHandler statementHandler = PluginUtils.realTarget(originalObject);
|
|
|
+ metaObject = SystemMetaObject.forObject(statementHandler);
|
|
|
+ // 好像不用判断也行,为了保险起见,还是加上吧.
|
|
|
+ boolean hasProperty = metaObject.hasGetter("delegate");
|
|
|
+ if (hasProperty) {
|
|
|
+ statementHandler = (StatementHandler) metaObject.getValue("delegate");
|
|
|
}
|
|
|
- // SQL 解析
|
|
|
- if (CollectionUtils.isNotEmpty(this.sqlParserList)) {
|
|
|
- // @SqlParser(filter = true) 跳过该方法解析
|
|
|
- if (SqlParserHelper.getSqlParserInfo(metaObject)) {
|
|
|
+ if (!CallableStatementHandler.class.equals(statementHandler.getClass())) {
|
|
|
+ if (null != this.sqlParserFilter && this.sqlParserFilter.doFilter(metaObject)) {
|
|
|
return;
|
|
|
}
|
|
|
- // 标记是否修改过 SQL
|
|
|
- int flag = 0;
|
|
|
- String originalSql = (String) metaObject.getValue(PluginUtils.DELEGATE_BOUNDSQL_SQL);
|
|
|
- for (ISqlParser sqlParser : this.sqlParserList) {
|
|
|
- if (sqlParser.doFilter(metaObject, originalSql)) {
|
|
|
- SqlInfo sqlInfo = sqlParser.parser(metaObject, originalSql);
|
|
|
- if (null != sqlInfo) {
|
|
|
- originalSql = sqlInfo.getSql();
|
|
|
- ++flag;
|
|
|
+ // SQL 解析
|
|
|
+ if (CollectionUtils.isNotEmpty(this.sqlParserList)) {
|
|
|
+ // @SqlParser(filter = true) 跳过该方法解析
|
|
|
+ if (SqlParserHelper.getSqlParserInfo(metaObject)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 标记是否修改过 SQL
|
|
|
+ int flag = 0;
|
|
|
+ String originalSql = (String) metaObject.getValue(PluginUtils.DELEGATE_BOUNDSQL_SQL);
|
|
|
+ for (ISqlParser sqlParser : this.sqlParserList) {
|
|
|
+ if (sqlParser.doFilter(metaObject, originalSql)) {
|
|
|
+ SqlInfo sqlInfo = sqlParser.parser(metaObject, originalSql);
|
|
|
+ if (null != sqlInfo) {
|
|
|
+ originalSql = sqlInfo.getSql();
|
|
|
+ ++flag;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- if (flag >= 1) {
|
|
|
- metaObject.setValue(PluginUtils.DELEGATE_BOUNDSQL_SQL, originalSql);
|
|
|
+ if (flag >= 1) {
|
|
|
+ metaObject.setValue(PluginUtils.DELEGATE_BOUNDSQL_SQL, originalSql);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|