@TableField 注解
表ID主键注解,可以重复注解(同时适配各种数据库)
属性说明
| 属性 | 是否可空 | 默认值 | 说明 |
|---|---|---|---|
| value | 是 | 列名 | |
| select | 是 | true | 是否查询,select(实体类.class)时生效 |
| insert | 是 | true | 是否修改,save(实体类)时生效 |
| update | 是 | true | update 时是否更新,强制时会更新 |
| neverUpdate | 是 | false | 永不update,除非用UpdateChain指定才会更新,强制也不更新 |
| jdbcType | 是 | 和 mybatis JdbcType 一样 | |
| typeHandler | 是 | 和 mybatis TypeHandler 一样 | |
| defaultValue | 是 | 新增默认值,save时生效,可静态,可动态:例如时间 "{NOW}" | |
| updateDefaultValue | 是 | 修改默认值,update时生效,可静态,可动态:例如时间 "{NOW}" | |
| defaultValueFillAlways | 是 | false | 插入默认值是否总是填充,开启则不管有没有值都是填充 |
| updateDefaultValueFillAlways | 是 | false | 修改默认值 是否总是填充,开启则不管有没有值都是填充 |
| exists | 是 | true | 是否是表字段 |
使用示例
java
@Table
@Data
public class DefaultValueTest {
@TableId
@TableId(dbType = DbType.ORACLE, value = IdAutoType.SQL, sql = "select default_value_test_seq.NEXTVAL FROM dual")
private Integer id;
//可省略
private String value1;
@TableField(defaultValue = "1", updateDefaultValue = "2")
private Integer value2;
@TableField(defaultValue = "{NOW}")
private LocalDateTime createTime;
@TableField("enum")
private TestEnum value3;
}列名符合驼峰模式的,无需填写 列名
框架自带动态默认值有哪些?
| 类型 | 说明 |
|---|---|
| {BLANK} | 空字符串 |
| {NOW} | 当前时间,可应用在 LocalDateTime,LocalDate,Date,Long,Integer 字段上 |
如何自定义自己的动态默认值
在项目启动执行,entity 是 实体类的class,type是字段的类型
XbatisGlobalConfig.setDynamicValue("{NOW}", (entity,type) -> {
if (type == LocalDateTime.class) {
return LocalDateTime.now();
} else if (type == LocalDate.class) {
return LocalDate.now();
} else if (type == Date.class) {
return new Date();
} else if (type == Long.class) {
return System.currentTimeMillis();
} else if (type == Integer.class) {
return (int) (System.currentTimeMillis() / 1000);
}
throw new RuntimeException("Inconsistent types");
});