@Column 注解属性详解

提示:文章旨在说明 @Column 注解属性如何在日常开发中使用,数据库类型为 MySql,其他类型数据库可能存在偏差,需要注意。


提示:以下是本篇文章正文内容,下面案例可供参考

一、name 方法

String name() default "";

该方法用于将实体类的属性与数据库表中的列进行映射,比如:

@Column(name = "user_age")
private String age;  // 映射到数据库的 user_age 列

如果不用该方法,则 java 实体类与数据库表中的列保持一致,如java中是 age,则数据库中也是 age,但是如果开启了全局命名策略,如小驼峰转换下划线,则会默认将java中多个单词的属性,用下划线隔开,并小写。如userAge,则对应的列为user_age;判断用下划线是取决于大写的字母。

开启配置:

spring:
  jpa:
    hibernate:
      naming:
        physical-strategy: org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy

二、unique 方法

boolean unique() default false;

指示该列是否具有唯一约束,建议与数据库中唯一索引共同开启,默认 false。

@Column(unique = true)
private String email;  // 确保email列的值在表中是唯一的

唯一索引

三、nullable 方法

boolean nullable() default true;

指示该列是否允许为 null 值,默认 true。

@Column(nullable = false)
private String password;  // 密码字段不允许为null

四、insertable 方法

boolean insertable() default true;

指示该列是否允许为 null 值,默认 true。

@Column(insertable = false)
private Date createTime;  // 创建时间由数据库自动生成,不包含在INSERT中

五、updatable 方法

boolean updatable() default true;

指示该列是否包含在 UPDATE 语句中,默认 true。

@Column(updatable = false)
private Long id;  // ID一旦创建不可更新

六、columnDefinition 方法

String columnDefinition() default "";

指定生成 DDL 时使用的列定义。

@Column(columnDefinition = "TEXT")
private String content;  // 指定为TEXT类型而非默认的VARCHAR

@Column(columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
private Date lastModified;  // 指定为TIMESTAMP类型,使用当前时间函数

@Column(columnDefinition = "varchar(64) comment '版本号'") 
private String edition;  // 指定为varchar类型,长度为64,中文注释为版本号

如果配置 spring.jpa.hibernate.ddl-auto=update,则会读取该方法生成对应的列,所以在开发阶段,配合使用会大大节约开发时间,强烈建议使用。唯一注意的是在使用需要让 java 中的类型与数据库中类型兼容,不要出现 java 中是字符串,而数据库中是时间类型。

七、table 方法

String table() default "";

当实体映射到多个表时,指定该列所属的表。

@Column(name = "hobby", table = "user_details")
private String hobby;  // 该属性映射到user_details表的列

该方法实际使用会比较复杂,会和 @SecondaryTable 注解配合使用,那么从例子可以看到,在主表对应的列是 hobby,在扩展表对应的列是 user_details,当然实际使用情况可能还会存在其他关联情况,这里不做过多讨论,大家只需知道该方法用于将属性映射到扩展表中的列即可。

八、length 方法

int length() default 255;

指定字符串类型列的长度(仅对String类型有效),默认 255。

@Column(length = 100)
private String title;  // 标题最大长度为100字符

九、precision 方法

int precision() default 0;

指定十进制数值的精度(总位数),用于 BigDecimal,默认 0。

@Column(precision = 10, scale = 2)
private BigDecimal salary;  // 总共10位,小数点后2位

一般和 scale 配合使用,建议对精确到小数点后几位的数字类型使用,场景建议为工业数字,钱币数值等。

十、scale 方法

int scale() default 0;

指定十进制数值的小数位数,用于 BigDecimal,默认 0。

@Column(precision = 5, scale = 2)
private BigDecimal price;  // 如123.45

一般和 precision 配合使用。

总结

没有总结,希望大家在实际开发中真正理解,并正确使用就好~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值