提示:文章旨在说明 @Column 注解属性如何在日常开发中使用,数据库类型为 MySql,其他类型数据库可能存在偏差,需要注意。
文章目录
- 一、name 方法
- 二、unique 方法
- 三、nullable 方法
- 四、insertable 方法
- 五、updatable 方法
- 六、columnDefinition 方法
- 七、table 方法
- 八、length 方法
- 九、precision 方法
- 十、scale 方法
- 总结
提示:以下是本篇文章正文内容,下面案例可供参考
一、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 配合使用。
总结
没有总结,希望大家在实际开发中真正理解,并正确使用就好~~~