spring boot jpa中的註解不少,參數也比較多。不必所有記住,可是常常查看官方文檔也比較麻煩,記錄一下一些經常使用的註解。經過一些具體的例子來幫助記憶。java
@Entity @Table(name = "flow")
@SQLDelete(sql = "update flow set deleted = 1 where id = ?")
@Where(clause = "deleted = 0")
public class Flow {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Column(updatable = false)
private Date createTime;
private Date operateTime;
@PrePersist
protected void onCreate() {
createTime = new Date();
}
@PreUpdate
protected void onUpdate() {
operateTime = new Date();
}
@Column(columnDefinition = "TEXT")
private String message;
private deleted = 0;
}
一、Entity 表示這個類是一個實體類,對應數據庫中的一個表spring
二、@Table 指定這個類對應數據庫中的表名。若是這個類名的命名方式符合數據庫的命名方式,能夠省略這個註解。如FlowType類名對應表名flow_type。sql
三、@Id 指定這個字段爲表的主鍵數據庫
四、@GeneratedValue(strategy=GenerationType.IDENTITY) 指定主鍵的生成方式,通常主鍵爲自增的話,就採用GenerationType.IDENTITY的生成方式app
五、@Column(updatable = false) @Columun 註解針對一個字段,對應表中的一列。有不少參數,name表示對應數據表中的字段名。insertable 表示插入式是否更新。updateable,表示update的時候是否更新;columnDefinition表示字段類型,當使用jpa自動生成表的時候比較有用。blog
六、@PrePersist 表示持久化以前執行繼承
七、@PreUpdate 表示執行Update操做以前執行。文檔
八、SQLDelete表示當執行jpa中的delete操做時,執行的語句it
九、@Where 當執行查詢語句時,會附帶這個條件。這個和上面的一塊兒使用,能夠實現軟刪除io
上述代碼表示數據庫中有一個表名爲flow的表。主鍵爲id,爲自增。createTime爲建立時間,當第一次插入的時候產生時間,後續不會隨着update變更。而operateTime僅在Update的時候更新。message是String類型,默認建立的字段爲Varchar類型,這裏指定爲TEXT。
咱們建立數據庫的時候,推薦每一個表都要有建立時間和更新時間,可是不必每一個表都寫重複的代碼,能夠用下面的註解來解決
@MappedSuperclass public class BaseEntity implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) protected Long id; @Column(updatable = false) private Date createTime; private Date updateTime; @PrePersist protected void onCreate() { createTime = new Date(); } @PreUpdate protected void onUpdate() { updateTime = new Date(); }
十、@MappedSuperclass 表示一個這是一個父類,不會被當成一個實體類。在這裏定義一些表中的通用字段。而後其餘實體類繼承這個類就能夠了,避免寫重複代碼。