# MyBatis-Plus教程 - 14 防全表更新与删除插件

防全表更新与删除,就是防止代码疏忽,例如在更新或删除的时候,没有指定条件,执行了更新或删除,导致对全表的数据进行了操作。

BlockAttackInnerInterceptor 是 MyBatis-Plus 框架提供的一个安全插件,专门用于防止恶意的全表更新和删除操作。该插件通过拦截 updatedelete 语句,确保这些操作不会无意中影响到整个数据表,从而保护数据的完整性和安全性。

# 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 测试

下面的代码在更新的时候,没有指定条件,会导致更新所有的数据。

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

所以在执行的时候会报错:

同样,删除全部数据的时候也会报错。