| 接口 | 说明 |
|---|---|
| InnerInterceptor |
| 类 | 说明 |
|---|---|
| BlockAttackInnerInterceptor |
攻击 SQL 阻断解析器,防止全表更新与删除
|
| DataPermissionInterceptor |
数据权限处理器
|
| DynamicTableNameInnerInterceptor |
动态表名
|
| IllegalSQLInnerInterceptor |
由于开发人员水平参差不齐,即使订了开发规范很多人也不遵守
SQL是影响系统性能最重要的因素,所以拦截掉垃圾SQL语句
拦截SQL类型的场景 1.必须使用到索引,包含left join连接字段,符合索引最左原则 必须使用索引好处, 1.1 如果因为动态SQL,bug导致update的where条件没有带上,全表更新上万条数据 1.2 如果检查到使用了索引,SQL性能基本不会太差 2.SQL尽量单表执行,有查询left join的语句,必须在注释里面允许该SQL运行,否则会被拦截,有left join的语句,如果不能拆成单表执行的SQL,请leader商量在做 https://gaoxianglong.github.io/shark SQL尽量单表执行的好处 2.1 查询条件简单、易于开理解和维护; 2.2 扩展性极强;(可为分库分表做准备) 2.3 缓存利用率高; 2.在字段上使用函数 3.where条件为空 4.where条件使用了 ! |
| OptimisticLockerInnerInterceptor |
Optimistic Lock Light version
Intercept on
Executor.update;
Support version types: int/Integer, long/Long, java.util.Date, java.sql.Timestamp
For extra types, please define a subclass and override getUpdatedVersionVal() method. |
| PaginationInnerInterceptor |
分页拦截器
默认对 left join 进行优化,虽然能优化count,但是加上分页的话如果1对多本身结果条数就是不正确的
|
| ReplacePlaceholderInnerInterceptor |
功能类似于
GlobalConfig.DbConfig#isReplacePlaceholder(),
只是这个是在运行时实时替换,适用范围更广 |
| ShardingInnerInterceptor | |
| TenantLineInnerInterceptor |