JAP 是spring 整合 持久化組件 簡化sql操作程序 ,下面介紹操作程序
第一步:
在pom檔案中匯入JPA的相關依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
并配置資料庫連接
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/crm?characterEncoding=utf-8&serverTimezone=UTC
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
jpa:
hibernate:
ddl-auto: update
show-sql: true
第二步
創建物體物件(物體物件對應資料庫表)
package com.spring.entity;
import javax.persistence.*;
@Entity //說明這個是一個物體類
@Table(name = "t_order") //設定該物體在資料庫中的表名稱
public class Order {
@Id //必須設定主鍵id說明該欄位是id 如果不存在則創建報錯
@GeneratedValue(strategy = GenerationType.AUTO) //設定主鍵屬性
@Column(name = "oid")
private Integer oid;
@Column(name = "orderName")
private String orderName;
@Column(name = "number")
private Integer number;
@Column(name = "address")
private String address;
public Integer getOid() {
return oid;
}
public void setOid(Integer oid) {
this.oid = oid;
}
public String getOrderName() {
return orderName;
}
public void setOrderName(String orderName) {
this.orderName = orderName;
}
public Integer getNumber() {
return number;
}
public void setNumber(Integer number) {
this.number = number;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
@Entity 說明這個是一個物體類
@Table(name = “t_order”) 設定該物體在資料庫中的表名稱
@Id 必須設定主鍵id說明該欄位是id 如果不存在則創建報錯
@GeneratedValue注解,在JPA中,@GeneratedValue注解存在的意義主要就是為一個物體生成一個唯一標識的主鍵(JPA要求每一個物體Entity,必須有且只有一個主鍵),@GeneratedValue提供了主鍵的生成策略,@GeneratedValue注解有兩個屬性,分別是strategy和generator,其中generator屬性的值是一個字串,默認為"",其宣告了主鍵生成器的名稱(對應于同名的主鍵生成器@SequenceGenerator和@TableGenerator),
具體的注解介紹@GeneratedValue注解詳解
@Column(name = “oid”) 設定資料庫中表對應的欄位名
列舉 創建 一對多 多對多 多對一 一對一的注解使用
- ManyToOne(多對一) ManyToOne(多對一)單向:不產生中間表,但可以用@Joincolumn(name=" ")來指定生成外鍵的名字,外鍵在多的一方表中產生!
- OneToMany(一對多) OneToMany(一對多)單向:會產生中間表,此時可以用@onetoMany @Joincolumn(name=" ")避免產生中間表,并且指定了外鍵的名字(別看 @joincolumn在一中寫著,但它存在在多的那個表中)
- OneToMany ,ManyToOne OneToMany ,ManyToOne 雙向(兩個注解一起用的):如果不在@OneToMany中加mappedy屬性就會產生中間表,此時通常在@ManyToOne的注 解下再添上注解@Joincolumn(name=" ")來指定外鍵的名字(說明:多的一方為關系維護端,關系維護端負責外鍵記錄的更新,關系被維護端沒有權利更新 外鍵記錄)!(@OneToMany(mappedBy=“一對多中,多中一的屬性”)出現mapby為被維護端|||默認為延遲加載)
用例:
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="child_id")
private OrderChild orderChild;
@OneToMany(mappedBy="orderChild",fetch=FetchType.LAZY,cascade={CascadeType.MERGE})
@NotFound(action=NotFoundAction.IGNORE) //代表可以為空,允許為null
private List<OrderChildGoods> goodsList;
@ManyToOne默認是立即加載,@OneToMany默認是懶加載
但是如果加上了@NotFound之后設定的fetch=FetchType.LAZY是不起作用的,也就是設定@NotFound后變為了立即加載eager
cascade:級聯操作權限
CascadeType.PERSIST:級聯持久化,也就是級聯保存,比如一個學生有很多門成績,保存學生了,那么也就會級聯保存各門成績資訊
CascadeType.REMOVE:級聯洗掉,洗掉學生了,那么學生的成績也從資料庫中洗掉
CascadeType.MERGE:級聯合并,修改學生成績資訊了,那么修改的成績資訊會保存到資料庫中,和上面persist的區別類似于put和post的區別
CascadeType.DETACH:級聯游離,要想洗掉某一條學生資訊,但學生的id在成績表中作為外鍵,無法直接洗掉
CascadeType.REFRESH:級聯重繪
CascadeType.ALL:上面所有的結合,慎用
fetch:設定關聯物件的加載方式
FetchType.EAGER:立即加載,比如在加載學生物件資訊時,立刻加載學生的成績資訊
FetchType.LAZy:延遲加載,需要用到的時候再加載
第三步
在springboot的啟動類上添加@EnableJpaRepositories注解 這是必須要添加的
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/209473.html
標籤:其他
上一篇:MYSQL(一)
下一篇:Java__陣列容器
