spring boot jpa中的注解很多,參數也比較多。沒必要全部記住,但是經常查看官方文檔也比較麻煩,記錄一下一些常用的注解。通過一些具體的例子來幫助記憶。
@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;
}
1、Entity 表示這個類是一個實體類,對應數據庫中的一個表
2、@Table 指定這個類對應數據庫中的表名。如果這個類名的命名方式符合數據庫的命名方式,可以省略這個注解。如FlowType類名對應表名flow_type。
3、@Id 指定這個字段為表的主鍵
4、@GeneratedValue(strategy=GenerationType.IDENTITY) 指定主鍵的生成方式,一般主鍵為自增的話,就采用GenerationType.IDENTITY的生成方式
5、@Column(updatable = false) @Columun 注解針對一個字段,對應表中的一列。有很多參數,name表示對應數據表中的字段名。insertable 表示插入式是否更新。updateable,表示update的時候是否更新;columnDefinition表示字段類型,當使用jpa自動生成表的時候比較有用。
6、@PrePersist 表示持久化之前執行
7、@PreUpdate 表示執行Update操作之前執行。
8、SQLDelete表示當執行jpa中的delete操作時,執行的語句
9、@Where 當執行查詢語句時,會附帶這個條件。這個和上面的一起使用,可以實現軟刪除
上述代碼表示數據庫中有一個表名為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(); }
10、@MappedSuperclass 表示一個這是一個父類,不會被當成一個實體類。在這里定義一些表中的通用字段。然后其他實體類繼承這個類就可以了,避免寫重復代碼。