|
|
@@ -1,61 +0,0 @@
|
|
|
-package net.mingsoft.interceptor;
|
|
|
-
|
|
|
-import com.baomidou.mybatisplus.core.plugins.InterceptorIgnoreHelper;
|
|
|
-import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
|
|
|
-import com.baomidou.mybatisplus.core.toolkit.TableNameParser;
|
|
|
-import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
|
|
|
-import org.apache.ibatis.executor.Executor;
|
|
|
-import org.apache.ibatis.executor.statement.StatementHandler;
|
|
|
-import org.apache.ibatis.mapping.BoundSql;
|
|
|
-import org.apache.ibatis.mapping.MappedStatement;
|
|
|
-import org.apache.ibatis.mapping.SqlCommandType;
|
|
|
-import org.apache.ibatis.session.ResultHandler;
|
|
|
-import org.apache.ibatis.session.RowBounds;
|
|
|
-
|
|
|
-import java.sql.Connection;
|
|
|
-import java.sql.SQLException;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
-
|
|
|
-public class DMInnerInterceptor implements InnerInterceptor {
|
|
|
-
|
|
|
- @Override
|
|
|
- public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
|
|
|
- PluginUtils.MPBoundSql mpBs = PluginUtils.mpBoundSql(boundSql);
|
|
|
- if (InterceptorIgnoreHelper.willIgnoreDynamicTableName(ms.getId())) return;
|
|
|
- mpBs.sql(this.changeTable(mpBs.sql()));
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void beforePrepare(StatementHandler sh, Connection connection, Integer transactionTimeout) {
|
|
|
- PluginUtils.MPStatementHandler mpSh = PluginUtils.mpStatementHandler(sh);
|
|
|
- MappedStatement ms = mpSh.mappedStatement();
|
|
|
- SqlCommandType sct = ms.getSqlCommandType();
|
|
|
- if (sct == SqlCommandType.INSERT || sct == SqlCommandType.UPDATE || sct == SqlCommandType.DELETE) {
|
|
|
- if (InterceptorIgnoreHelper.willIgnoreDynamicTableName(ms.getId())) return;
|
|
|
- PluginUtils.MPBoundSql mpBs = mpSh.mPBoundSql();
|
|
|
- mpBs.sql(this.changeTable(mpBs.sql()));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- protected String changeTable(String sql) {
|
|
|
- TableNameParser parser = new TableNameParser(sql);
|
|
|
- List<TableNameParser.SqlToken> names = new ArrayList<>();
|
|
|
- parser.accept(names::add);
|
|
|
- StringBuilder builder = new StringBuilder();
|
|
|
- int last = 0;
|
|
|
- for (TableNameParser.SqlToken name : names) {
|
|
|
- int start = name.getStart();
|
|
|
- if (start != last) {
|
|
|
- builder.append(sql, last, start);
|
|
|
- String value = name.getValue();
|
|
|
- builder.append(String.format("\"%s\"",value));
|
|
|
- }
|
|
|
- last = name.getEnd();
|
|
|
- }
|
|
|
- if (last != sql.length()) {
|
|
|
- builder.append(sql.substring(last));
|
|
|
- }
|
|
|
- return builder.toString();
|
|
|
- }
|
|
|
-}
|