spring boot 整合 jpa (三) -- 之表關係對映
spring boot 整合 jpa (一) – 之基礎配置
https://blog.csdn.net/qq_41463655/article/details/82939481
spring boot 整合 jpa (二) – 之資料操作
https://blog.csdn.net/qq_41463655/article/details/82939560
@Entity
1、資料庫不存在表會自動建立表
2、資料庫不存在某些欄位資料庫會自動建立該欄位
指定了外來鍵關係會自動在資料庫中生成外來鍵
User 使用者類
@Table(name = "ws_user") //生成資料庫的表名 @Entity // 該註解宣告一個實體類,與資料庫中的表對應 public class User { @Id // 表明主鍵id @GeneratedValue // 主鍵的生成策略(看最下方註釋具體說明) private Long userId; private String username; private String password; //======================= 使用者 - [ 一對一 ] - 使用者詳情 ================ // @JoinColumn(name = "user_id") //外來鍵關聯 @PrimaryKeyJoinColumn //主鍵關聯 @OneToOne(cascade=CascadeType.ALL) //ALL 級聯/新增/更新/刪除(看最下方註釋具體說明) // 使用者詳情類 private UserDetail de![在這裡插入圖片描述](https://img-blog.csdn.net/2018100419254813?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNDYzNjU1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)tail; //======================= 使用者 - [ 一對多 ] - 收穫地址 =============== //外來鍵關聯,指定一的一端的id 做外來鍵 @JoinColumn(name = "user_id") @OneToMany(cascade=CascadeType.ALL) // 地址類 private List<Address> addresses; //======================= 使用者 - [ 多對一 ] - 部門 ================ //外來鍵關聯,指定一的一端的id 做外來鍵 @JoinColumn(name = "dep_id") @ManyToOne(cascade=CascadeType.ALL) // 部門類 private Dep dep; //======================= 使用者 - [ 多對多 ] - 角色 =================== //name指中間表的表名,joinColumns指當前實體在中間表的欄位,inverserJoinCloumns指關聯的另外一個實體在中間表的欄位名 @JoinTable(name="ws_user_role",
[email protected](name="user_id"),[email protected](name="role_id")) @ManyToMany(cascade=CascadeType.ALL) //角色類 private List<Role> roles; set,get 方法自行新增........ //詳細註解說明 // ================================= 表關係註解說明 ================================ // @JsonIgnore //將不需要返回的屬性上新增忽略,多為複雜表關係屬性排除使用 //@Transient 註解,表明為成員變數,不和資料庫欄位做對映 /* * @OneToOne 一對一 * @OneToMany 一對多 * @ManyToOne 多對一 * @ManyToMany 多對多 * * 上訴關係指定後新增的屬性 * cascade:表示預設的級聯操作策略,可以指定為ALL(全部),預設為無級聯操作 * PERSIST(級聯儲存), * MERGE (級聯更新), * REFRESH(級聯重新整理) * REMOVE (級聯刪除) * fetch:表示抓取策略,預設為FetchType.EAGER , * EAGER(急記載,立即記載) * LAZY(懶載入) * optional:是否允許該欄位為null,該屬性應該根據資料庫表的外來鍵約束來確定,預設為true **/ // ================================= 屬性註解 @Column 說明 ================================ /* * * @Column: 指定生成的表字段名和長度,不指定預設255長度且表字段名同屬性名一致 * * 指定欄位 tradeNo 長度為50,且值不能為null * @Column(name = "tradeNo", length = 50, nullable = false) * * 指定欄位 tradeNo 長度為50,且值可以為null * @Column(name = "tradeNo", length = 50, nullable = true) * * 指定欄位totalAmount(長度)為10,小數點位數為2位,且值不能為null * @Column(name = "totalAmount", precision = 10, scale = 2, nullable = false) * **/ // =============================== 主鍵策略 @GeneratedValue 說明 ============================ /** @GeneratedValue 主鍵id --> 生成策略註解說明 * @GeneratedValue(strategy=GenerationType.AUTO) //示範 * –IDENTITY:採用資料庫ID自增長的方式來自增主鍵欄位,Oracle 不支援這種方式; * –AUTO: JPA自動選擇合適的策略,是預設選項; * –SEQUENCE:通過序列產生主鍵,通過@SequenceGenerator 註解指定序列名,MySql不支援這種方式 * –TABLE: 通過表產生主鍵,框架藉由表模擬序列產生主鍵,使用該策略可以使應用更易於資料庫移植。 **/
指定關係後,查詢使用者就可以把使用者關聯其他表的所有資料查詢出來了
呼叫 controller 的查詢方法獲得
[{“userId”:2,“username”:“小微”,“password”:“123”,“detail”:{“detailId”:2,“nickname”:“17603093954”},“addresses”:[{“id”:3,“province”:“泥南鄉”,“city”:“宜賓”}],“dep”:{“depId”:2,“name”:“管理”},“roles”:[{“roleId”:1,“name”:“開發”}]},{“userId”:1,“username”:“王鬆”,“password”:“123”,“detail”:{“detailId”:1,“nickname”:“17628689969”},“addresses”:[{“id”:1,“province”:“紅星橋”,“city”:“成都”},{“id”:2,“province”:“泥南鄉”,“city”:“宜賓”}],“dep”:{“depId”:1,“name”:“技術”},“roles”:[{“roleId”:1,“name”:“開發”},{“roleId”:2,“name”:“測試”}]}]
格式化檢視
使用者詳情類
import javax.persistence.*;
/**
* Created by Administrator on 2018/10/3/003.
* 使用者詳情類
*/
@Table(name = "ws_detail")
@Entity
public class UserDetail {
@Id
@GeneratedValue(strategy = GenerationType.AUTO) // 主鍵的生成策略
private Long detailId;
private String nickname;
//省略set,get.......
}
收穫地址類
/**
* Created by Administrator on 2018/10/3/003.
* 收穫地址類
*/
@Table(name="ws_address")
@Entity
public class Address {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long id;
private String province;
private String city;
//省略set,get.......
}
部門類
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* Created by Administrator on 2018/10/3/003.
* 部門類
*/
@Table(name = "ws_dep")
@Entity
public class Dep {
@Id
@GeneratedValue
private Long depId;
private String name;
//省略set,get.......
}
角色類
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* Created by Administrator on 2018/10/3/003.
* 角色類
*/
@Table(name = "ws_role")
@Entity
public class Role {
@Id
@GeneratedValue
private Long roleId;
private String name;
//省略set,get.......
}