最近公司在使用SpringDataJpa時,需要創建實體類,通過實體類來創建數據庫表結構,生成數據庫表。
下面我們就來看下在創建實體類時一些常用的注解吧!!!
1.實體類常用注解
@Entity
標識這個實體類是一個JPA實體,告訴JPA在程序運行的時候記得生成這個實體類所對應的表
@Table(name = "自定義的表名")
自定義設置這個實體類在數據庫所對應的表名,默認是實體類名。注:Mysql關鍵字不要設置為實體類,會發生創建表不成功的問題。例如:leave
@org.hibernate.annotations.Table(appliesTo = "t_holiday_info", comment = "節假日信息表")
定義表的注釋,用來了解表的內容
@Id
把這個類里面所在的變量設置為主鍵Id
@GeneratedValue
設置主鍵的生成策略,這種方式依賴於具體的數據庫,如果數據庫不支持自增主鍵,那么這個類型是沒法用的
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "repair_seq"):表示主鍵生成策略是sequence(可以為Auto、IDENTITY、native等,Auto表示可在多個數據庫間切換),指定sequence的名字是repair_seq。
例如:
@Basic
表示一個簡單的屬性到數據庫表的字段的映射,對於沒有任何標注的getXxxx()方法,默認 即為 @Basic fetch: 表示該屬性的讀取策略,有EAGER和LAZY兩種,分別表示主支抓取和延遲加載,默認為EAGER.
@Column
@Column表示列的說明,如果字段名與列名相同,則可以省略。@Column注解屬性詳細說明
(1)name屬性:被標注字段在數據庫表中所對應字段的名稱;
(2)length屬性:表示該字段的長度,當字段的類型為varchar時,該屬性才有效果,默認為255個字符;
(3)nullable屬性:表示該字段是否可以為null值,默認是true。
(4)unique屬性:表示該字段是否為唯一標識,默認fasle。
(5)precision和scale屬性:precision屬性和scale屬性表示精度,當字段類型為double時,precision表示數值的總長度,scale表示小數點所占的位數。
@Transient
表示該屬性並非一個到數據庫表的字段的映射,ORM框架將忽略該屬性. 如果一個屬性並非數據庫表的字段映射,就務必將其標示為 @Transient ,否則,ORM框架默認其注 解為 @Basic
@Temporal
@Temporal注解表示格式化時間日期。有三種,默認是@Temporal(TemporalType.TIMESTAMP)。具體如下:
(1)@Temporal(TemporalType.DATE):日期,頁面取得結果格式如:2016-08-05
(2)@Temporal(TemporalType.TIME):時間,頁面取得結果是: 13:46:25
(3)@Temporal(TemporalType.TIMESTAMP):時間和日期,頁面取得結果是:2016-08-05 13:46:25
注解方式有兩種:
寫在字段上:
@Temporal(TemporalType.TIMESTAMP) private Date birthday;
寫在 getXxx方法上:
@Temporal(TemporalType.DATE) @Column(name = "birthday", length = 10) public Date getBirthday() { return this.birthday; }
@Enumerated("需要定義存入數據庫的類型”)
使用@Enumerated映射枚舉字段,我這里為性別建立了性別的枚舉類型,而后面跟上的是存入數據庫以String類型存入。
實體類示例(Customer):
@DateTimeFormat
因為傳入的參數是 String 類型的,而用來接收參數的 DateVo 的 date 屬性是 java.util.Date 類型的,類型無法轉換
可以使用 Spring 的 @DateTimeFormat 注解格式化參數
假如注解為:
@DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss")
則傳入的參數應該是這樣的:
2018/08/02 22:05:55
否則會拋出異常。
@JsonFormat
1.使用maven引入@JsonFormat所需要的jar包,我貼一下我這里的pom文件的依賴
<!--JsonFormat-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.8</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
2.在你需要查詢出來的時間的數據庫字段對應的實體類的屬性上添加@JsonFormat
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
public
class
TestClass {
//設置時區為上海時區,時間格式自己據需求定。
@JsonFormat(pattern=
"yyyy-MM-dd"
,timezone =
"GMT+8"
)
private
Date testTime;
public
Date gettestTime() {
return
testTime;
}
public
void
settestTime(Date testTimee) {
this
.testTime= testTime;
}
}
這里解釋一下:@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
pattern:是你需要轉換的時間日期的格式
timezone:是時間設置為東八區,避免時間在轉換中有誤差
提示:@JsonFormat注解可以在屬性的上方,同樣可以在屬性對應的get方法上,兩種方式沒有區別
3.完成上面兩步之后,我們用對應的實體類來接收數據庫查詢出來的結果時就完成了時間格式的轉換,再返回給前端時就是一個符合我們設置的時間格式了
注解@JsonFormat主要是后台到前台的時間格式的轉換
注解@DataFormAT主要是前后到后台的時間格式的轉換
表的