<b>2.1.2 實體模組化</b>
首先建立一些普通對象,用來與資料庫的表建立映射關系,接着示範如何使用jpa對資料庫進行增删查改等存取操作。
假如現在有三個實體:部門、使用者和角色,并且它們具有一定的關系,即一個使用者隻能隸屬于一個部門,一個使用者可以擁有多個角色。它們的關系模型如圖2-1所示。
圖2-1 mysql實體-關系模型示例
spring boot的實體模組化與使用spring架構時的定義方法一樣,同樣比較友善的是使用了注解的方式來實作。
部門實體的模組化如代碼清單2-2所示,其中注解@table指定關聯的資料庫的表名,注解@id定義一條記錄的唯一辨別,并結合注解@generatedvalue将其設定為自動生成。部門實體隻有兩個字段:id和name。程式中省略了getter和setter方法的定義,這些方法可以使用idea的自動生成工具很友善地生成。
代碼清單2-2 部門實體模組化
@entity
@table(name =
"deparment")
public class
deparment {
@id
@generatedvalue(strategy =
generationtype.identity)
private long id;
private string name;
public deparment() {
}
……
}
使用者實體包含三個字段:id、name和createdate,使用者實體模組化如代碼清單2-3所示。其中注解@manytoone定義它與部門的多對一關系,并且在資料庫表中用字段did來表示部門的id,注解@manytomany定義與角色實體的多對多關系,并且用中間表user_role來存儲它們各自的id,以表示它們的對應關系。日期類型的資料必須使用注解@datetimeformat來進行格式化,以保證它在存取時能提供正确的格式,避免儲存失敗。注解@jsonbackreference用來防止關系對象的遞歸通路。
代碼清單2-3 使用者實體模組化
"user")
user implements java.io.serializable{
@datetimeformat(pattern = "yyyy-mm-dd
hh:mm:ss")
private date createdate;
@manytoone
@joincolumn(name = "did")
@jsonbackreference
private department deparment;
@manytomany(cascade = {}, fetch =
fetchtype.eager)
@jointable(name = "user_role",
joincolumns = {@joincolumn(name =
"user_id")},
inversejoincolumns =
{@joincolumn(name = "roles_id")})
private list<role> roles;
public user() {
……
角色實體模組化比較簡單,隻要按設計的要求,定義id和name字段即可,當然同樣必須保證id的唯一性并将其設定為自動生成。角色實體的模組化如代碼清單2-4所示。
代碼清單2-4 角色實體模組化
"role")
role implements java.io.serializable{
public role() {