简介
SQL 执行分析拦截器【 目前只支持 MYSQL-5.6.3 以上版本 】,
作用是分析 处理 DELETE UPDATE 语句, 防止小白或者恶意 delete update 全表操作!
com.baomidou.mybatisplus.plugins.SqlExplainInterceptor
参数:stopProceed 发现执行全表 delete update 语句是否停止执行
注意!该插件只用于开发环境,不建议生产环境使用。。。
原理
在插件的底层,通过SQL语句分析命令:Explain分析当前SQL语句,根据结果集中的Extra列来判定当前是否全局操作。
实现
来到项目下的applicationContext.xml中配置sqlSessionFactoryBean的地方。
<!-- 配置SqlSessionFactoryBean
Mybatis提供的: org.mybatis.spring.SqlSessionFactoryBean
MP提供的:com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean
-->
<bean id="sqlSessionFactoryBean" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
<!-- 别名处理 -->
<property name="typeAliasesPackage" value="com.badao.beans"></property>
<!-- 注入全局MP策略配置 -->
<property name="globalConfig" ref="globalConfiguration"></property>
<!-- 插件注册 -->
<property name="plugins">
<list>
<!-- 注册分页插件 -->
<bean class="com.baomidou.mybatisplus.plugins.PaginationInterceptor"></bean>
<!-- 注册执行分析插件 -->
<bean class="com.baomidou.mybatisplus.plugins.SqlExplainInterceptor">
<property name="stopProceed" value="true" />
</bean>
</list>
</property>
</bean>
编写测试方法
/***
* 执行分析插件
*/
@Test
public void testExplainPlugin() {
//不传任何条件 所以是删除全表操作
employeeMapper.delete(null);
}
运行结果
可以看到提示失败原因是全表操作被拒绝。