parent
1c16536ff1
commit
4682b0ca51
21 changed files with 327 additions and 263 deletions
@ -0,0 +1,61 @@ |
|||||||
|
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(); |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,45 @@ |
|||||||
|
package net.mingsoft.interceptor; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.plugins.InterceptorIgnoreHelper; |
||||||
|
import com.baomidou.mybatisplus.core.toolkit.PluginUtils; |
||||||
|
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; |
||||||
|
|
||||||
|
/** |
||||||
|
* Mysql 适配通用拦截器,主要处理不支持的sql语句 |
||||||
|
*/ |
||||||
|
public class MysqlInnerInterceptor 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.changeSql(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.changeSql(mpBs.sql())); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
protected String changeSql(String sql) { |
||||||
|
//替换所有"为`
|
||||||
|
return sql.replaceAll("\"","`"); |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue