目录
- 前言
- 1. 基本知识
- 2. Demo
前言
对于Java基本知识推荐阅读:
- java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)
- 【Java项目】实战CRUD的功能整理(持续更新)
一开始是因为报错多租户的问题,导致无法使用其他的库,又不想使用JDBC,后续发现可以使用该注解防止拦截器拦截!
1. 基本知识
@InterceptorIgnore 是 MyBatis-Plus 提供的一个注解,允许在 Mapper 类或方法上指定需要忽略的插件和拦截器,提供了灵活的方式来控制在特定操作中不应用某些拦截器,从而满足特定的业务需求
基本的源码如下:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface InterceptorIgnore {/*** 行级租户 {@link com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor}*/String tenantLine() default "";/*** 动态表名 {@link com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor}*/String dynamicTableName() default "";/*** 攻击 SQL 阻断解析器,防止全表更新与删除 {@link com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor}*/String blockAttack() default "";/*** 垃圾SQL拦截 {@link com.baomidou.mybatisplus.extension.plugins.inner.IllegalSQLInnerInterceptor}*/String illegalSql() default "";/*** 数据权限 {@link com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor}* <p>* 默认关闭,需要注解打开*/String dataPermission() default "1";/*** 其他的* <p>* 格式应该为: "key"+"@"+可选项[false,true,1,0,on,off]* 例如: "xxx@1" 或 "xxx@true" 或 "xxx@on"* <p>* 如果配置了该属性的注解是注解在 Mapper 上的,则如果该 Mapper 的一部分 Method 需要取反则需要在 Method 上注解并配置此属性为反值* 例如: "xxx@1" 在 Mapper 上, 则 Method 上需要 "xxx@0"*/String[] others() default {};
}
具体的注解属性以及作用如下:
属性 | 类型 | 说明 |
---|---|---|
tenantLine | String | 行级租户插件,指定在该方法或类中忽略行级租户的拦截 |
dynamicTableName | String | 动态表名插件,指定在该方法或类中忽略动态表名的拦截 |
blockAttack | String | 攻击 SQL 阻断解析器,防止全表更新与删除,指定在该方法或类中忽略该拦截 |
illegalSql | String | 垃圾 SQL 拦截,指定在该方法或类中忽略垃圾 SQL 的拦截 |
dataPermission | String | 数据权限拦截器,默认为关闭状态,需要注解打开 |
others | String[] | 其他拦截器的配置,格式为 “key@可选项”,可以配置多种其他拦截器的开关状态 |
2. Demo
基本的示例Demo如下:
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {// 此方法会应用所有拦截器@PostMapping("/addUser")public String addUser(User user) {// 执行插入用户的逻辑return "用户添加成功!";}// 此方法将忽略行级租户@PostMapping("/addUserIgnoringPlugins")@InterceptorIgnore(tenantLine = "true")public String addUserIgnoringPlugins(User user) {// 执行插入用户的逻辑,行级租户 解析器不会生效return "用户添加成功(忽略插件)!";}
}
上述只是Demo示例
实战中的Demo示例也同理: