# MyBatis-Plus教程 - 14 防全表更新与删除插件
防全表更新与删除,就是防止代码疏忽,例如在更新或删除的时候,没有指定条件,执行了更新或删除,导致对全表的数据进行了操作。
BlockAttackInnerInterceptor
是 MyBatis-Plus 框架提供的一个安全插件,专门用于防止恶意的全表更新和删除操作。该插件通过拦截 update
和 delete
语句,确保这些操作不会无意中影响到整个数据表,从而保护数据的完整性和安全性。
# 14.1 插件使用
# 1 插件配置
和之前分页插件的配置是一样的,在之前的 MyBatisPlusConfig 配置类中配置。
@Configuration
public class MyBatisPlusConfig {
/**
* 添加插件
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 防止全表更新与删除
interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
// 乐观锁配置
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
// 分页插件,如果配置多个插件, 切记分页最后添加
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 2 测试
下面的代码在更新的时候,没有指定条件,会导致更新所有的数据。
User user = new User();
user.setUsername("张三");
user.setAge(12);
user.setUpdateTime(new Date());
// 第二个参数是Wrapper条件
int result = userMapper.update(user, null);
log.info("修改用户结果:{}", result);
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
所以在执行的时候会报错:
同样,删除全部数据的时候也会报错。