逻辑删除,自动填充,IDEA插件整合笔记
1 逻辑删除
1 介绍
- 所谓逻辑删除,即不是真正在数据库中对数据进行删除,而是通过一个字段控制该数据的状态,来表示是否已删除
- MybatisPlus的逻辑删除操作,实际是替换sql,将所有
delete
相关的sql,更改为update
,来修改删除状态 - 将所有的
select
后面都拼接一个where deleteflag = 未删除状态
,来查询未删除的数据
2 逻辑删除开启
- (1)修改数据库表,添加表示删除状态的字段
1
2alter table user
add column delete_flag int default 0
- (2)实体类添加相应属性
1
2
3
4
5
6
7
8
9
10
11
public class User {
private Integer id;
private String name;
private Integer age;
private String email;
//mybatis-plus3.3.0以上可以省略
private int deleteFlag;
}
- (3)配置yaml开启逻辑删除
1
2
3
4
5
6mybatis-plus:
global-config:
db-config:
logic-delete-field: deleteFlag #逻辑删除实体类属性名
logic-delete-value: 1 #删除状态值
logic-not-delete-value: 0 #未删除状态值
- (4)测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class SpringMPTest {
private UserMapper userMapper;
public void logicDeleteTest() {
//删除测试
userMapper.deleteById(1);
//查询测试
userMapper.selectList(null);
}
}
2 自动填充
2.1 介绍
- 有时候,我们希望我们的sql的某些字段不用传参,也能自动补充参数,执行插入或更新操作
- 而MybatisPlus提供了自动填充功能,为了我们定义的字段,自动补充参数
- 我们也可以在创建表字段的时候设置默认值来达到此效果
2.2 使用
- (1)新增数据库表字段
1
2
3
4
5
6
7# 添加时间字段
alter table user
add column create_time datetime
alter table user
add column update_time datetime
- (2)实体新增相应属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class User {
private Integer id;
private String name;
private Integer age;
private String email;
private int deleteFlag;
//添加fill属性,有DEFAULT(不处理),INSERT(新增时填充),UPDATE(更新时填充),INSERT_UPDATE(新增和更新时填充)
private Date createTime;
private Date updateTime;
}
- (3)创建自动填充处理器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class AutoFillHandler implements MetaObjectHandler {
//插入填充
public void insertFill(MetaObject metaObject) {
//三种方法都可以,选择其中一种
//方法一:[metaObject, 实体类属性名, Java类型,填充数值]
this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
//方式二:[metaObject,实体类属性名, 函数:带返回值(可用lamda),Java类型]
this.strictInsertFill(metaObject, "createTime", () -> {return new Date();}, Date.class);
//方法三:[metaObject, 实体类属性名,填充数值]
this.fillStrategy(metaObject, "createTime", new Date());
}
//更新填充
public void updateFill(MetaObject metaObject) {
//update与insert同理
this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
}
}
- (4)测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void autoFillTest() {
//新增测试
User user = new User();
user.setName("asaki");
user.setAge(18);
user.setEmail("asaki@qq.com");
userMapper.insert(user);
//更新测试
User user1 = new User();
user1.setName("C酱");
user1.setId(1);
userMapper.updateById(user1);
}
3 IDEA插件
3.1 介绍
- MybatisPlus为IDEA专门提供一个便利的插件MybatisX
- 通过MyabtisX,我们可以通过Mapper接口,直接跳转到对应的SQL的xml文件中,十分方便
3.2 插件安装
- File –> Settings –> Plugins ,搜索MybatisX,安装后重启IDEA