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);