mybatisPlus配置逻辑删除和配置插入数据时自动保存逻辑删除字段
在实际开发中,删除数据一定要慎重,对于重要的数据,最好不要直接进行物理删除,物理删除是将数据在数据库中直接删除掉,如果后期有什么问题再想查看之前的数据,就很麻烦 ,这时对重要的表数据采用逻辑删除的办法就比较好,逻辑删除只是变更了数据库中逻辑删除的字段参数,并没有真的删除掉,方便后期查看。下面是我用mybatisPlus开发的时候使用逻辑删除的步骤: |
---|
springboot配置方式
- 配置yml文件
mybatis-plus:
global-config:
db-config:
logic-delete-value: 1 #状态 1 表示删除
logic-not-delete-value: 0 #状态 0 表示未删除
- 创建配置类
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Class MybatisPlusConfig
* @Description: TODO
* @Author Eric
* @Version
* @date 2020/4/21 下午12:27
*/
@Configuration
public class MybatisPlusConfig {
/**
* 若mp的版本是3.3.1以下的就需要在此处注入这个bean对象
* 若mp的版本高于3.3.1的就无需在此处注入bean对象了
*/
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
}
- 在实体类上添加@TableLogic注解
@TableLogic
private Integer isDelete;
- 接下来就可以直接调用mp自带的delete方法了
这时候调用 mp的删除和查询方法都会自带逻辑删除功能(查询出的数据都是状态为0的数据)
调用MysqlPlus中的方法的sql
调用删除时 update 表名 set isDeleted=1 where id =1
调用查找时 select * from 表名 where isDeleted=0
注:如果你想物理删除,直接在*Mapper.xml 文件中,自己单独写一个delete方法即可,命名最好不要与mp中的
命名相同,否则命名相同时,你调用这个方法,系统此时实现的是你自己写的mapper方法
在有逻辑删除字段的表中,如果添加新的数据的时候想自动填充逻辑删除状态,mp也是可以实现的:
- 重写insertFill方法
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* @author Eric
* @date 2020/4/26
**/
@Component
public class MybatisPlusMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
/**
* mybatisplus自定义填充公共字段 ,即没有传的字段自动填充
* 第一个参数是数据库逻辑删除字段名称,第二个参数是你默认添加的逻辑删除字段数据
*/
setFieldValByName("isDelete", 0,metaObject);
}
}
- 在实体类上添加@TableField注解
@TableLogic
@TableField(fill = FieldFill.INSERT)
private Integer isDelete;
操作很简单,配置完后,你再调用mp的insert方法,就算没有传逻辑删除字段参数,数据库也会自动填充的。