spring-boot-route(九)整合JPA操作資料庫
阿新 • • 發佈:2020-10-08
單調的增刪改查讓越來越多的程式設計師感到乏味,這時候就出現了很多優秀的框架,完成了對增刪改查操作的封裝,只需要簡單配置,無需書寫任何sql,就可以完成增刪改查。這裡比較推薦的是Spring Data Jpa。
Spring Data JPA是Spring Data家族的一部分,可以輕鬆實現基於JPA的儲存庫。 此模組處理對基於JPA的資料訪問層的增強支援。 它使構建使用資料訪問技術的Spring驅動應用程式變得更加容易。
我們繼續使用前兩章用的資料庫結構來進行演示。
### 一 引入mysql和spring-data-jpa依賴
```java
```
### 二 建立實體類
```java
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class Student implements Serializable {
private static final long serialVersionUID = 6712540741269055064L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer studentId;
private Integer age;
private String name;
private Integer sex;
private Date createTime;
private Integer status;
}
```
@GeneratedValue是主鍵生成策略,Jpa自帶的幾種主鍵生成策略如下:
- TABLE: 使用一個特定的資料庫表格來儲存主鍵
- SEQUENCE: 根據底層資料庫的序列來生成主鍵,條件是資料庫支援序列。這個值要與generator一起使用,generator 指定生成主鍵使用的生成器(可能是orcale中自己編寫的序列)
- IDENTITY: 主鍵由資料庫自動生成(主要是支援自動增長的資料庫,如mysql)
- AUTO: 主鍵由程式控制,也是GenerationType的預設值
**主鍵生成策略擴充套件**
自定義主鍵生成器:
```java
public class MyGenerator implements IdentifierGenerator {
@Override
public Serializable generate(SharedSessionContractImplementor sharedSessionContractImplementor, Object o) throws HibernateException {
return getId();
}
public static long getId(){
return System.currentTimeMillis();
}
}
```
然後在實體類做一下配置:
```java
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class Student implements Serializable {
private static final long serialVersionUID = 6712540741269055064L;
@Id
@GenericGenerator(name="idGenerator",strategy = "com.javatrip.springdatajpa.entity.MyGenerator")
@GeneratedValue(generator = "idGenerator")
private Integer studentId;
private Integer age;
private String name;
private Integer sex;
private Date createTime;
private Integer status;
}
```
### 三 建立dao介面
dao層介面實現JpaRepository,泛型選擇pojo和其主鍵型別,就會自動實現簡單的CRUD等介面,無需手動開發,就能快速進行呼叫。
```java
public interface StudentRepository extends JpaRe