DAY29.2 Java核心基礎
Spring Boot 整合 Spring Data JPA
Spring Data JPA根據具體的數據庫分為不同的子模塊,無論是關系型數據庫和非關系型數據庫,Spring Data都提供了支持
Mysql:Spring Data JPA
Redis:Spring Data Redis
什么是 Spring Data JPA
是 Spring Data 家族的一部分,使得基于 JPA 的存儲變得更加方便
什么是 JPA?
Java Persistence API Java 持久層規范,在現有的 ORM 框架基礎上發展而來的,易于使用,擴展性強,JPA 包含 3 部分內容:
1、ORM 映射元數據:支持 XML 和注解兩種元數據的形式
2、API:操作實體對象來執行 CRUD 操作
3、查詢語言:通過面向對象而非面向數據庫的查詢語言查詢數據,避免程序的 SQL 耦合度過高
JPA(Java Persistence API) 是一套由 Java 官方定義的 ORM(對象關系映射)規范,它只是定義了一組接口和規范,無法直接使用。要使用 JPA,必須依賴其具體實現,比如 Hibernate 就是最常用的 JPA 實現框架之一。
Spring Data JPA 是 Spring 提供的基于 JPA 的數據訪問抽象框架,它對 JPA 進行了進一步封裝,簡化了數據訪問層的開發。使用 Spring Data JPA,開發者只需定義接口,遵循一定的命名規則,就可以實現常見的數據庫 CRUD 操作,而無需編寫接口的實現類。需要注意的是,Spring Data JPA 并不直接操作數據庫,它仍然依賴 Hibernate 等 JPA 實現作為底層支撐。
關于 Spring Data JPA 與 Spring JdbcTemplate 的關系與區別:
- 二者沒有直接關聯,它們是兩種不同的數據訪問方式。
- Spring JdbcTemplate 是基于原生 JDBC 的封裝,提供了一套簡潔的模板方法,簡化了數據庫操作中的樣板代碼,但依然需要手動編寫 SQL。
- Spring Data JPA 則是基于 ORM 的方式,通過實體映射和接口定義來完成數據庫操作,通常不需要寫 SQL(除非自定義查詢)。
簡單對比:
特性 | Spring Data JPA | Spring JdbcTemplate |
---|---|---|
編程方式 | 面向對象(基于實體類和接口) | 面向過程(基于 SQL) |
是否需寫 SQL | 一般不需要,除非自定義查詢 | 需要手寫 SQL |
底層依賴 | JPA 實現(如 Hibernate) | 原生 JDBC |
使用復雜度 | 較高層次,易上手 | 靈活但略繁瑣 |
總結來說,Spring Data JPA 適合需要快速開發、模型清晰的場景,而 Spring JdbcTemplate 則適用于需要靈活控制 SQL 或操作復雜查詢邏輯的場景。
1、導入依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
2、創建實體類,映射到數據庫表,Spring Data JPA常用的注解有
- @Id:將成員變量與數據庫表的主鍵進行映射
- @Entity:將實體類與數據庫表進行映射
- @GeneratedValue:表示自動生成主鍵,strategy 為主鍵生成策略,一般是自增
- @Column:將實體類中的成員變量和數據表中的普通字段進行映射
@Entity(name = "people")
public class People {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Integer id;@Columnprivate String name;@Columnprivate Integer age;
}
strategy 的策略區別:
策略 | 原理 | 依賴數據庫 | 是否支持批量 | 性能 | 建議使用場景 |
---|---|---|---|---|---|
IDENTITY | 數據庫自增 | 是 | 否 | 中等 | MySQL/SQLServer 主鍵生成 |
SEQUENCE | 數據庫序列 | 是 | 是 | 高 | Oracle/PostgreSQL,支持高并發 |
TABLE | 表模擬序列 | 否 | 否 | 低 | 數據庫無序列但需跨庫兼容 |
AUTO | 自動選擇(依賴實現) | 是 | 視情況而定 | 不確定 | 快速開發/入門,但不適用于復雜系統 |
3、創建接口,基礎父類JpaRepository,直接繼承即可,Spring Data Jpa是一個全自動的框架,底層是Hibernate的框架,直接使用接口,不需要自己寫sql
public interface PeopleDao extends JpaRepository<People,Integer> {
}
4、控制層Controller(基本的增刪改查)
@RestController
@RequestMapping("/people")
public class PeopleController {@Autowiredprivate PeopleDao peopleDao;@GetMapping("/findAll")public String findAll(){return peopleDao.findAll().toString();}@GetMapping("/findById/{id}")public String findById(@PathVariable("id") Integer id){return peopleDao.findById(id).toString();}@PostMapping("/add")public People add(@RequestBody People people){return peopleDao.save(people);}@PutMapping("/save")public People save(@RequestBody People people){return peopleDao.save(people);}@DeleteMapping("/delete/{id}")public String delete(@PathVariable("id") Integer id){peopleDao.deleteById(id);return "刪除成功";}
}