1.自动填充
需求描述:
项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。
我们可以使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作;
项目实例:
现在数据库中存在create_time与update_time两条字段,要对这两字段实现自动填充操作;
1.1在实体类中使用fill属性进行填充设置
@TableField(fill = FieldFill.INSERT) // 通过fill属性指定什么时候填充值 在添加时
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE) //在添加与修改时
private LocalDateTime updateTime;
2.2设置元对象处理器
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
/**
* 元对象处理器
*/
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
// 插入时填充值
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime", LocalDateTime.now(), metaObject);
this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
}
// 修改时填充值
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
}
}
2.乐观锁
主要适用场景:
当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新
乐观锁实现方式:
取出记录时,获取当前version
更新时,带上这个version
执行更新时, set version = newVersion where version = oldVersion
如果version不对,就更新失败
2.1修改实体类
@Version //添加 @Version 注解
private Integer version; //乐观锁版本号
2.2创建配置类
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisPlusConfig {
// 乐观锁插件
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor(){
return new OptimisticLockerInterceptor();
}
}
3.逻辑删除
逻辑删除:
假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录
逻辑删除的使用场景:
可以进行数据恢复
有关联数据,不便删除
3.1添加修改字段
添加 deleted字段
ALTER TABLE `user` ADD COLUMN `deleted` boolean DEFAULT false
3.2实体类修改
添加deleted 字段,并加上 @TableLogic 注解
@TableLogic //用于标记一个类是一个逻辑表
private Integer deleted;
注:逻辑表是指一个虚拟的表,它不对应于数据库中的实际表,而是由程序动态生成和管理的。