MyBatis-plus如何实现字段类型处理器、自动填充和乐观锁等功能的详细教程?
摘要:MyBatis-plus拓展 逻辑删除 逻辑删除就是增加一个字段表示这个数据的状态,通过状态来显示数据或隐藏数据,而不是真正的删除。 MyBatis-plus使用@TableLogic注解来标注逻辑删除字段: public class Us
MyBatis-plus拓展
逻辑删除
逻辑删除就是增加一个字段表示这个数据的状态,通过状态来显示数据或隐藏数据,而不是真正的删除。
MyBatis-plus使用@TableLogic注解来标注逻辑删除字段:
public class User extends Model<User> {
@TableId
private Long id;
private String name;
private Integer age;
private String email;
// 配置当前字段为逻辑删除字段
// 默认值是1,删除状态的值是0
@TableLogic(value = "1",delval = "0")
private Integer status;
}
此时如果调用Mapper的删除方法,实际对应的sql语句是更新操作。将逻辑删除字段的值更新为0,而不是真正的删除。
而且此时Mapper的查询方法,不会查出这条数据。生成的sql语句会自动拼接where条件:status = 1
逻辑删除也可以在配置文件中进行全局配置:
mybatis-plus:
global-config:
banner: false
db-config:
id-type: assign_id
# 逻辑删除字段为status
logic-delete-field: status
# 删除状态的值
logic-delete-value: 0
# 未删除状态的值
logic-not-delete-value: 1
使用全局配置后就不用使用@TableLogic注解了。
通用枚举
假如要表示性别:只有男和女两个值,我们就可以使用枚举来描述。
数据库表中使用gender (int 类型)表示性别,0表示女性,1表示男性。
使用@EnumValue来标注将哪个变量的值插入到数据库。
先创建枚举类
public enum GenderEnum {
MAN(1,"男"),WOMAN(0,"女");
@EnumValue // 表示将这个变量的值插入到数据库
private Integer gender;
private String genderName;
GenderEnum(Integer gender, String genderName) {
this.gender = gender;
this.genderName = genderName;
}
}
给Pojo类添加枚举属性
public class User extends Model<User> {
@TableId
private Long id;
private String name;
private Integer age;
private String email;
// 配置当前字段为逻辑删除字段
// 默认值是1,删除状态的值是0
@TableLogic(value = "1",delval = "0")
private Integer status;
private GenderEnum gender;
}
调用正常的插入方法即可实现。
字段类型处理器
某些场景下,实体类中使用map集合作为属性接收前端传来的数据,但是把这些输出存到数据库时,使用json格式的字符串存储。那怎么把map类型转换成字符串类型呢?这里就需要使用字段类型处理器。
需要@TableName注解和@TableField注解配合使用。
