天天看點

深入實踐Spring Boot2.1.2 實體模組化

<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&lt;role&gt; roles;

    public user() {

……

角色實體模組化比較簡單,隻要按設計的要求,定義id和name字段即可,當然同樣必須保證id的唯一性并将其設定為自動生成。角色實體的模組化如代碼清單2-4所示。

代碼清單2-4 角色實體模組化

"role")

role implements java.io.serializable{

    public role() {