自定义全局操作
根据 MybatisPlus 的 AutoSqlInjector 可以自定义各种你想要的 sql ,注入到全局中,相当于自 定义 Mybatisplus 自动注入的方法。
之前需要在 xml 中进行配置的 SQL 语句,现在通过扩展 AutoSqlInjector 在加载 mybatis 环境 时就注入。
8.1 AutoSqlInjector
- 在 Mapper 接口中定义相关的 CRUD 方法
2) 扩展 AutoSqlInjector inject 方法,实现 Mapper 接口中方法要注入的 SQL
package com.blh.mp.inject;
import com.baomidou.mybatisplus.entity.TableInfo;
import com.baomidou.mybatisplus.mapper.AutoSqlInjector;
import org.apache.ibatis.builder.MapperBuilderAssistant;
import org.apache.ibatis.mapping.SqlSource;
import org.apache.ibatis.session.Configuration;
public class MySQLInject extends AutoSqlInjector {
/**
* 扩展inject方法
*/
@Override
public void inject(Configuration configuration, MapperBuilderAssistant builderAssistant, Class<?> mapperClass, Class<?> modelClass, TableInfo table) {
//将EmployeeMapper接口中定义的deleteAll,处理成对应的MappedStatement对象,加入到Configuration对象中
//注入的SQL语句
String sql = "delete from " +table.getTableName();
//注入的方法名 一定要与EmployeeMapper中的方法名一致
String method = "deleteAll";
//构造SQLSource对象
SqlSource sqlSource = languageDriver.createSqlSource(configuration,sql,modelClass);
//构造一个删除的MappedStatement
this.addDeleteMappedStatement(mapperClass,method,sqlSource);
}
}
- 在 MP 全局策略中,配置 自定义注入器
逻辑删除
假删除、逻辑删除: 并不会真正的从数据库中将数据删除掉,而是将当前被删除的这条数据 中的一个逻辑删除字段置为删除状态.
tbl_user logic_flag = 1 → -1
- com.baomidou.mybatisplus.mapper.LogicSqlInjector
-
logicDeleteValue 逻辑删除全局值
-
logicNotDeleteValue 逻辑未删除全局值
4) 在 POJO 的逻辑删除字段 添加 @TableLogic 注解
- 会在 mp 自带查询和更新方法的 sql 后面,追加『逻辑删除字段』 = 『LogicNotDeleteValue 默认值』 删除方法: deleteById()和其他 delete 方法, 底层 SQL 调用的是 update tbl_xxx set 『逻辑删除字段』=『logicDeleteValue 默认值』