提示:文章旨在說明 @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 配合使用。
總結
沒有總結,希望大家在實際開發中真正理解,并正確使用就好~~~