JPA簡介
Spring Data JPA是Spring Data大家族的一部分,它可以輕鬆實現基於JPA的儲存庫。該模組用於增強支援基於JPA的資料訪問層,它使我們可以更加容易地構建使用資料訪問技術的Spring驅動的應用程式。
對於普通的開發者而言,自己實現應用程式的資料訪問層是一件很麻煩的時間,開發者必須編寫大量樣板程式碼來執行簡單的查詢以及執行分頁和統計,Spring Data JPA旨在通過將工作量減少到實際需要的程度來顯著改進資料訪問層的實現。作為開發人員,我們只需要編寫儲存庫介面(Repository介面),包括自定義查詢方法,其餘的工作,Spring將自動幫我們完成。
JPA特性
- 對基於Spring和JPA的儲存庫構建的完善支援。
- 支援Querydsl查詢框架,從而支援型別安全的JPA查詢。
- 域類的透明審計。
- 具備分頁支援、動態查詢執行、整合自定義資料訪問程式碼的能力。
- 在啟動時驗證帶@Query註解的查詢。
- 支援基於XML的實體對映。
- 通過引入@EnableJpaRepositories註解來實現基於JavaConfig的儲存庫配置。
SpringBoot整合JPA
(1)新增Spring Data JPA依賴啟動器
引入這兩個依賴器建立專案,在專案pom.xml檔案會出現以下依賴:
(2)編寫ORM實體類
package com.hardy.springbootdatajpa.entity; import javax.persistence.*; /** * @Author: HardyYao * @Date: 2021/6/13 */ @Entity(name = "t_comment") // 設定ORM實體類,並指定對映的表名 public class Comment { @Id // 對映對應的主鍵id @GeneratedValue(strategy = GenerationType.IDENTITY) // 設定主鍵自增策略 private Integer id; private String content; private String author; @Column(name = "a_id") // 指定對映的表欄位名 private Integer aId; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public Integer getaId() { return aId; } public void setaId(Integer aId) { this.aId = aId; } @Override public String toString() { return "Comment{" + "id=" + id + ", content='" + content + '\'' + ", author='" + author + '\'' + ", aId=" + aId + '}'; } }
(3)編寫Repository介面
package com.hardy.springbootdatajpa.repository; import com.hardy.springbootdatajpa.entity.Comment; import org.springframework.data.jpa.repository.JpaRepository; /** * @Author: HardyYao * @Date: 2021/6/13 */ public interface CommentRepository extends JpaRepository<Comment,Integer> { }
(4)編寫配置檔案
# MySQL資料庫連線配置 spring.datasource.url=jdbc:mysql://localhost:3306/springbootdata?serverTimezone=UTC spring.datasource.username=root spring.datasource.password=root
(5)測試
編寫測試方法:
package com.hardy.springbootdatajpa; import com.hardy.springbootdatajpa.entity.Comment; import com.hardy.springbootdatajpa.repository.CommentRepository; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.Optional; @SpringBootTest class SpringbootdataJpaApplicationTests { @Autowired private CommentRepository repository; @Test public void selectComment() { Optional<Comment> optional = repository.findById(1); if (optional.isPresent()) { System.out.println(optional.get()); } System.out.println(); } }
列印測試結果: