@Intercepts(value=@Signature(type=org.apache.ibatis.executor.statement.StatementHandler.class,method="prepare",args={java.sql.Connection.class,java.lang.Integer.class}))
public class IllegalSQLInterceptor
extends java.lang.Object
implements org.apache.ibatis.plugin.Interceptor
拦截SQL类型的场景 1.必须使用到索引,包含left jion连接字段,符合索引最左原则 必须使用索引好处, 1.1 如果因为动态SQL,bug导致update的where条件没有带上,全表更新上万条数据 1.2 如果检查到使用了索引,SQL性能基本不会太差
2.SQL尽量单表执行,有查询left jion的语句,必须在注释里面允许该SQL运行,否则会被拦截,有left jion的语句,如果不能拆成单表执行的SQL,请leader商量在做 http://gaoxianglong.github.io/shark/ SQL尽量单表执行的好处 2.1 查询条件简单、易于开理解和维护; 2.2 扩展性极强;(可为分库分表做准备) 2.3 缓存利用率高;
2.在字段上使用函数 3.where条件为空 4.where条件使用了 != 5.where条件使用了 not 关键字 6.where条件使用了 or 关键字 7.where条件使用了 使用子查询
| 构造器和说明 |
|---|
IllegalSQLInterceptor() |
| 限定符和类型 | 方法和说明 |
|---|---|
static java.util.List<com.baomidou.mybatisplus.extension.plugins.IllegalSQLInterceptor.IndexInfo> |
getIndexInfos(java.lang.String dbName,
java.lang.String tableName,
java.sql.Connection conn)
得到表的索引信息
|
static java.util.List<com.baomidou.mybatisplus.extension.plugins.IllegalSQLInterceptor.IndexInfo> |
getIndexInfos(java.lang.String key,
java.lang.String dbName,
java.lang.String tableName,
java.sql.Connection conn)
得到表的索引信息
|
java.lang.Object |
intercept(org.apache.ibatis.plugin.Invocation invocation) |
java.lang.Object |
plugin(java.lang.Object target) |
void |
setProperties(java.util.Properties prop) |
public static java.util.List<com.baomidou.mybatisplus.extension.plugins.IllegalSQLInterceptor.IndexInfo> getIndexInfos(java.lang.String dbName,
java.lang.String tableName,
java.sql.Connection conn)
dbName - tableName - conn - public static java.util.List<com.baomidou.mybatisplus.extension.plugins.IllegalSQLInterceptor.IndexInfo> getIndexInfos(java.lang.String key,
java.lang.String dbName,
java.lang.String tableName,
java.sql.Connection conn)
key - dbName - tableName - conn - public java.lang.Object intercept(org.apache.ibatis.plugin.Invocation invocation)
throws java.lang.Throwable
intercept 在接口中 org.apache.ibatis.plugin.Interceptorjava.lang.Throwablepublic java.lang.Object plugin(java.lang.Object target)
plugin 在接口中 org.apache.ibatis.plugin.Interceptorpublic void setProperties(java.util.Properties prop)
setProperties 在接口中 org.apache.ibatis.plugin.Interceptor