miemie преди 1 година
родител
ревизия
6d65d69995

+ 27 - 78
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/DataChangeRecorderInnerInterceptor.java

@@ -15,59 +15,38 @@
  */
  */
 package com.baomidou.mybatisplus.extension.plugins.inner;
 package com.baomidou.mybatisplus.extension.plugins.inner;
 
 
-import java.io.Reader;
-import java.math.BigDecimal;
-import java.sql.Clob;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.ResultSetMetaData;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Properties;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
-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.mapping.SqlCommandType;
-import org.apache.ibatis.reflection.MetaObject;
-import org.apache.ibatis.scripting.defaults.DefaultParameterHandler;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
 import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
 import com.baomidou.mybatisplus.core.metadata.TableInfo;
 import com.baomidou.mybatisplus.core.metadata.TableInfo;
 import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
 import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
 import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
 import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
-
+import com.baomidou.mybatisplus.extension.parser.JsqlParserGlobal;
 import lombok.Data;
 import lombok.Data;
 import net.sf.jsqlparser.expression.Expression;
 import net.sf.jsqlparser.expression.Expression;
 import net.sf.jsqlparser.expression.JdbcParameter;
 import net.sf.jsqlparser.expression.JdbcParameter;
-import net.sf.jsqlparser.parser.CCJSqlParserUtil;
 import net.sf.jsqlparser.schema.Column;
 import net.sf.jsqlparser.schema.Column;
 import net.sf.jsqlparser.schema.Table;
 import net.sf.jsqlparser.schema.Table;
 import net.sf.jsqlparser.statement.Statement;
 import net.sf.jsqlparser.statement.Statement;
 import net.sf.jsqlparser.statement.delete.Delete;
 import net.sf.jsqlparser.statement.delete.Delete;
 import net.sf.jsqlparser.statement.insert.Insert;
 import net.sf.jsqlparser.statement.insert.Insert;
-import net.sf.jsqlparser.statement.select.AllColumns;
-import net.sf.jsqlparser.statement.select.FromItem;
-import net.sf.jsqlparser.statement.select.PlainSelect;
-import net.sf.jsqlparser.statement.select.Select;
-import net.sf.jsqlparser.statement.select.SelectExpressionItem;
-import net.sf.jsqlparser.statement.select.SelectItem;
+import net.sf.jsqlparser.statement.select.*;
 import net.sf.jsqlparser.statement.update.Update;
 import net.sf.jsqlparser.statement.update.Update;
 import net.sf.jsqlparser.statement.update.UpdateSet;
 import net.sf.jsqlparser.statement.update.UpdateSet;
+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.mapping.SqlCommandType;
+import org.apache.ibatis.reflection.MetaObject;
+import org.apache.ibatis.scripting.defaults.DefaultParameterHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.Reader;
+import java.math.BigDecimal;
+import java.sql.*;
+import java.util.Date;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -135,7 +114,7 @@ public class DataChangeRecorderInnerInterceptor implements InnerInterceptor {
             OperationResult operationResult;
             OperationResult operationResult;
             long startTs = System.currentTimeMillis();
             long startTs = System.currentTimeMillis();
             try {
             try {
-                Statement statement = CCJSqlParserUtil.parse(mpBs.sql());
+                Statement statement = JsqlParserGlobal.parse(mpBs.sql());
                 if (statement instanceof Insert) {
                 if (statement instanceof Insert) {
                     operationResult = processInsert((Insert) statement, mpSh.boundSql());
                     operationResult = processInsert((Insert) statement, mpSh.boundSql());
                 } else if (statement instanceof Update) {
                 } else if (statement instanceof Update) {
@@ -219,8 +198,8 @@ public class DataChangeRecorderInnerInterceptor implements InnerInterceptor {
         BoundSql boundSql4Select = new BoundSql(mappedStatement.getConfiguration(), selectStmt.toString(),
         BoundSql boundSql4Select = new BoundSql(mappedStatement.getConfiguration(), selectStmt.toString(),
             prepareParameterMapping4Select(boundSql.getParameterMappings(), updateStmt),
             prepareParameterMapping4Select(boundSql.getParameterMappings(), updateStmt),
             boundSql.getParameterObject());
             boundSql.getParameterObject());
-        MetaObject metaObject = PluginUtils.getMetaObject(boundSql);
-        Map<String, Object> additionalParameters = (Map<String, Object>) metaObject.getValue("additionalParameters");
+        PluginUtils.MPBoundSql mpBoundSql = PluginUtils.mpBoundSql(boundSql);
+        Map<String, Object> additionalParameters = mpBoundSql.additionalParameters();
         if (additionalParameters != null && !additionalParameters.isEmpty()) {
         if (additionalParameters != null && !additionalParameters.isEmpty()) {
             for (Map.Entry<String, Object> ety : additionalParameters.entrySet()) {
             for (Map.Entry<String, Object> ety : additionalParameters.entrySet()) {
                 boundSql4Select.setAdditionalParameter(ety.getKey(), ety.getValue());
                 boundSql4Select.setAdditionalParameter(ety.getKey(), ety.getValue());
@@ -608,7 +587,6 @@ public class DataChangeRecorderInnerInterceptor implements InnerInterceptor {
 
 
     @Data
     @Data
     public static class OperationResult {
     public static class OperationResult {
-
         private String operation;
         private String operation;
         private boolean recordStatus;
         private boolean recordStatus;
         private String tableName;
         private String tableName;
@@ -618,30 +596,6 @@ public class DataChangeRecorderInnerInterceptor implements InnerInterceptor {
          */
          */
         private long cost;
         private long cost;
 
 
-        public String getTableName() {
-            return tableName;
-        }
-
-        public void setTableName(String tableName) {
-            this.tableName = tableName;
-        }
-
-        public String getOperation() {
-            return operation;
-        }
-
-        public void setOperation(String operation) {
-            this.operation = operation;
-        }
-
-        public boolean isRecordStatus() {
-            return recordStatus;
-        }
-
-        public void setRecordStatus(boolean recordStatus) {
-            this.recordStatus = recordStatus;
-        }
-
         public void buildDataStr(List<DataChangedRecord> records) {
         public void buildDataStr(List<DataChangedRecord> records) {
             StringBuilder sb = new StringBuilder();
             StringBuilder sb = new StringBuilder();
             sb.append("[");
             sb.append("[");
@@ -659,15 +613,12 @@ public class DataChangeRecorderInnerInterceptor implements InnerInterceptor {
 
 
         @Override
         @Override
         public String toString() {
         public String toString() {
-            StringBuilder sb = new StringBuilder();
-            sb.append("{");
-            sb.append("\"").append("tableName").append("\"").append(":").append("\"").append(tableName).append("\"").append(",");
-            sb.append("\"").append("operation").append("\"").append(":").append("\"").append(operation).append("\"").append(",");
-            sb.append("\"").append("recordStatus").append("\"").append(":").append("\"").append(recordStatus).append("\"").append(",");
-            sb.append("\"").append("changedData").append("\"").append(":").append(changedData).append(",");
-            sb.append("\"").append("cost(ms)").append("\"").append(":").append(cost);
-            sb.append("}");
-            return sb.toString();
+            return "{" +
+                    "\"tableName\":\"" + tableName + "\"," +
+                    "\"operation\":\"" + operation + "\"," +
+                    "\"recordStatus\":\"" + recordStatus + "\"," +
+                    "\"changedData\":" + changedData + "," +
+                    "\"cost(ms)\":" + cost + "}";
         }
         }
     }
     }
 
 
@@ -841,7 +792,5 @@ public class DataChangeRecorderInnerInterceptor implements InnerInterceptor {
         }
         }
 
 
         public static DataUpdateLimitationException DEFAULT = new DataUpdateLimitationException("本次操作 因超过系统安全阈值 被拦截,如需继续,请联系管理员!");
         public static DataUpdateLimitationException DEFAULT = new DataUpdateLimitationException("本次操作 因超过系统安全阈值 被拦截,如需继续,请联系管理员!");
-
     }
     }
-
 }
 }

+ 3 - 3
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/PaginationInnerInterceptor.java

@@ -19,6 +19,7 @@ import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.baomidou.mybatisplus.core.toolkit.*;
 import com.baomidou.mybatisplus.core.toolkit.*;
+import com.baomidou.mybatisplus.extension.parser.JsqlParserGlobal;
 import com.baomidou.mybatisplus.extension.plugins.pagination.DialectFactory;
 import com.baomidou.mybatisplus.extension.plugins.pagination.DialectFactory;
 import com.baomidou.mybatisplus.extension.plugins.pagination.DialectModel;
 import com.baomidou.mybatisplus.extension.plugins.pagination.DialectModel;
 import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.IDialect;
 import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.IDialect;
@@ -30,7 +31,6 @@ import lombok.NoArgsConstructor;
 import net.sf.jsqlparser.JSQLParserException;
 import net.sf.jsqlparser.JSQLParserException;
 import net.sf.jsqlparser.expression.Alias;
 import net.sf.jsqlparser.expression.Alias;
 import net.sf.jsqlparser.expression.Expression;
 import net.sf.jsqlparser.expression.Expression;
-import net.sf.jsqlparser.parser.CCJSqlParserUtil;
 import net.sf.jsqlparser.schema.Column;
 import net.sf.jsqlparser.schema.Column;
 import net.sf.jsqlparser.schema.Table;
 import net.sf.jsqlparser.schema.Table;
 import net.sf.jsqlparser.statement.select.*;
 import net.sf.jsqlparser.statement.select.*;
@@ -261,7 +261,7 @@ public class PaginationInnerInterceptor implements InnerInterceptor {
             return lowLevelCountSql(sql);
             return lowLevelCountSql(sql);
         }
         }
         try {
         try {
-            Select select = (Select) CCJSqlParserUtil.parse(sql);
+            Select select = (Select) JsqlParserGlobal.parse(sql);
             SelectBody selectBody = select.getSelectBody();
             SelectBody selectBody = select.getSelectBody();
             // https://github.com/baomidou/mybatis-plus/issues/3920  分页增加union语法支持
             // https://github.com/baomidou/mybatis-plus/issues/3920  分页增加union语法支持
             if (selectBody instanceof SetOperationList) {
             if (selectBody instanceof SetOperationList) {
@@ -382,7 +382,7 @@ public class PaginationInnerInterceptor implements InnerInterceptor {
      */
      */
     public String concatOrderBy(String originalSql, List<OrderItem> orderList) {
     public String concatOrderBy(String originalSql, List<OrderItem> orderList) {
         try {
         try {
-            Select select = (Select) CCJSqlParserUtil.parse(originalSql);
+            Select select = (Select) JsqlParserGlobal.parse(originalSql);
             SelectBody selectBody = select.getSelectBody();
             SelectBody selectBody = select.getSelectBody();
             if (selectBody instanceof PlainSelect) {
             if (selectBody instanceof PlainSelect) {
                 PlainSelect plainSelect = (PlainSelect) selectBody;
                 PlainSelect plainSelect = (PlainSelect) selectBody;