MyBatis-Plus 逻辑删除不能自动填充的处理方法

官方文档关于逻辑删除的描述

Gitee官方示例代码

mybatis-plus 逻辑删除无法做自动填充的问题

mybatisplus 结果_Mybatis Plus学习笔记(逻辑删除/动态填充/常用插件)

我是用的 MyBatis 版本为 2.2.1,MyBatis-Plus 版本为 3.4.3.4。

下面直接上代码。

package com.gtcom.backstage.injector;

import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.extension.injector.methods.LogicDeleteByIdWithFill;

import java.util.List;

/**
 * @author wangbo
 * @date 2022/1/18
 */
public class MySqlInjector extends DefaultSqlInjector {

    @Override
    public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
        //继承原有方法
        List<AbstractMethod> methodList = super.getMethodList(mapperClass, tableInfo);
        //注入新方法
        methodList.add(new LogicDeleteByIdWithFill());
        return methodList;
    }
}
package com.gtcom.backstage.configuration;

import com.gtcom.backstage.injector.MySqlInjector;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author wangbo
 * @date 2022/1/18
 */
@Configuration
public class MyBatisPlusConfig {

    @Bean
    public MySqlInjector sqlInjectorPlus() {
        return new MySqlInjector();
    }
}
package com.gtcom.backstage.injector;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
 * @author wangbo
 * @date 2022/1/18
 */
public interface MyBaseMapper<T> extends BaseMapper<T> {

    /**
     * 根据主键删除,并且自动填充
     *
     * @param entity 请求实体
     * @return 更新记录数
     */
    int deleteByIdWithFill(T entity);
}

使用代码:

这里注意直接继承 MyBaseMapper,而不是 MyBatis-Plus 提供的 BaseMapper。

package com.gtcom.backstage.mapper;

import com.gtcom.backstage.entity.OutputUser;
import com.gtcom.backstage.injector.MyBaseMapper;
import org.apache.ibatis.annotations.Mapper;

/**
 * @author wangbo
 * @date 2022/1/18
 */
@Mapper
public interface OutputUserMapper extends MyBaseMapper<OutputUser> {
}

具体调用代码:

OutputUser outputUserForUpdate = new OutputUser();
outputUserForUpdate.setId(userId);
outputUserMapper.deleteByIdWithFill(outputUserForUpdate);

执行的 SQL:

UPDATE output_user SET update_time = ?, deleted = 1 WHERE id = ? AND deleted = 0

可以看出 update_time 字段已经被自动填充上了。
在这里插入图片描述
可以看到 3.5.0 版本后,官方已经实现了这个功能,不需要做这个配置了。

具体调用代码:

OutputUser outputUserForUpdate = new OutputUser();
outputUserForUpdate.setId(userId);
outputUserMapper.deleteById(outputUserForUpdate);

但是下面的写法还是不能自动填充的:

outputUserMapper.deleteById(userId);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值