二十、Spring boot整合Jpa API
阿新 • • 發佈:2018-12-12
(一)新增依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
(二)配置資料來源和JPA
spring: datasource: #JDBC配置檔案 name: test url: jdbc:mysql://127.0.0.1:3306/tomcat username: root password: root driver-class-name: com.mysql.jdbc.Driver jpa: database: mysql #是否在啟動時的時候初始化schema(建立表)---ddl資料庫定義語言 generate-ddl: true #顯示sql語句 show-sql: true hibernate: # create 每次都先刪除表,再建立表 # create-drop 每次應用停止,刪除表 # update 不建立表,保留原有資料 # none 不做任何動作 # valiad 驗證類中的屬性與表中的欄位是否一致,不一致會報錯 ddl-auto: create-drop
(三)實體雙向關係 在JPA中,實體雙向關係主要有
- @OneToOne 一對一
- @OneToMany 一對多
- @ManyToOne 多對一
- @ManyToMany 多對多
需要注意的是,不管哪種關係,一定要使用
mappedBy
屬性,在受控方設定該物件在主控方的屬性,設定主從關係(PS:mappedBy
屬性設在哪個物件,那麼對方就會把這個物件的主鍵id作為外來鍵)。 1、@OneToOne (一對一) 裡面涉及到的一些註解如下: @Entity:實體名,有這個註解才能保證被對映成表 @Table(name = “customers”):設定對映表的表名 @Id:主鍵 @GeneratedValue:主鍵自增 @Column(length = 200):設定列值長度為200 @OneToOne(cascade = CascadeType.REMOVE):設定級聯刪除,在主控方設定 @OneToOne(mappedBy = “creditCard”):在受控方加該主鍵,mappedBy:反轉控制,即控制權在“creditCard”屬性所在的類Customer
以客戶(Customer)和信用卡(CreditCard)為例講解一對一關係: 客戶:
/**
* @Access(value = AccessType.FIELD):注入的時候只通過欄位的方式,不通過get()和set()方式
* @Table(name = "customers"):建立的表名
*/
@Entity
@Access(value = AccessType.FIELD)
@Table(name = "customers")
public class Customer {
/**
* @Id:主鍵
* @GeneratedValue:主鍵自增
*/
@Id
@GeneratedValue
private Long id;
/**
* @Column(length = 200):設定列值長度為200
*/
@Column(length = 200)
private String name;
/**
* 設定級聯刪除,在主控方設定
*/
@OneToOne(cascade = CascadeType.REMOVE)
private CreditCard creditCard;
}
信用卡:
/**
* @author 鹹魚
* @date 2018/9/29 19:12
*/
@Entity
@Table(name = "credit_cards")
public class CreditCard {
@Id
@GeneratedValue
private Long id;
@Column(length = 128)
private String number;
@Column(name = "reg_date")
private Date registerDate;
/**
* mappedBy:反轉控制,即控制權在“creditCard”屬性所在的類Customer
*/
@OneToOne(mappedBy = "creditCard")
private Customer customer;
}
2、@OneToMany (一對多)和@ManyToOne (多對一) 這兩個註解一般成隊出現,一對多或者多對一關係中,一般多方為控制方,一方為受控方。 這裡用到的兩個註解:
- @ManyToOne 多方 主控方
- @OneToMany(mappedBy = “store”) 一方 受控方
這裡以商店(Store)和客戶(Customer)為例進行講解: 在客戶(Customer)實體中新增商店(Store)物件。
/**
* 多方
*/
@ManyToOne
private Store store;
商店(Store)
@Entity
@Table(name = "stores")
public class Store {
@Id
@GeneratedValue
private Long id;
private String name;
/**
* 一方
*/
@OneToMany(mappedBy = "store")
private List<Customer> customers;
}
3、@ManyToMany (多對多)