TableFieldDefault
大约 2 分钟
TableFieldDefault
表字段默认值,由于我们在实际开发中,会需要对数据表字段设置默认值,但是数据库的设置默认值的方式不是很方便和自由,所以有了这个注解,并且,这个默认值是写死在Java
代码里面的,数据不需要去额外的设置,更适配业务需求
参数说明
参数 | 类型 | 必须 | 默认 | 说明 |
---|---|---|---|---|
value | String | 否 | "" | 值 |
isBlank | boolean | 否 | false | 是否设置为空字符串 |
isTimeNow | boolean | 否 | false | 是否设置为当前时间 |
isRandom | boolean | 否 | false | 是否随机,这里默认随机是 uuid |
expression | String | 否 | "" | Spring Expression Language (SpEL) expression. 用来生成默认值 |
handler | Class<? extends TableFieldDefaultHandler> | 否 | DefaultTableFieldDefaultHandler.class | 自定义默认值该如何设置 |
fill | SqlCommandType[] | 否 | {SqlCommandType.INSERT} | 字段自动填充策略,默认只在新增插入操作的时候自动填充 |
TableFieldDefaultHandler
自定义默认值规则,可以实现这个接口,然后注入到Spring
容器就可以实现自定义这个默认值如何生成了,例如,需要将某个字段值设置成当前登录用户的id
:
示例
public interface TableFieldDefaultLoginUserIdHandler extends TableFieldDefaultHandler<Serializable> {
@Override
default Serializable get(Object entity) {
try {
ISecurityUtil securityUtil = SpringUtil.getBean(ISecurityUtil.class);
return (Long) securityUtil.getLoginUser().getUserId();
} catch (Exception e) {
return null;
}
}
}
@AutoConfiguration
public class ApplicationConfig {
@Bean
@ConditionalOnMissingBean
public TableFieldDefaultLoginUserIdHandler tableFieldDefaultLoginUserIdHandler() {
return new TableFieldDefaultLoginUserIdHandler() {
};
}
}
@Data
public class Entity implements Serializable {
/**
* 创建人
*/
@JsonSerialize(using = ToStringSerializer.class)
@Schema(description = "创建人")
@TableFieldDefault(handler = TableFieldDefaultLoginUserIdHandler.class)
private Long createUser;
}
这样,当前使用MyBatisPlus
的insert
方法时就会自动将当前登录用户的id
设置进这个字段,然后保存到数据库
SqlCommandType
数据库操作枚举
值 | 说明 |
---|---|
INSERT | 新增 |
UPDATE | 修改 |
DELETE | 删除 |
使用说明
直接注解到需要设置默认值的数据库实体类的字段上
/**
* 创建时间
*/
@Schema(description = "创建时间")
@TableFieldDefault(isTimeNow = true)
private LocalDateTime createTime;