Spring Boot - JPA配置使用
1.JPA是什麼
JPA顧名思義就是Java Persistence API的意思,是JDK 5.0註解或XML描述物件-關係表的對映關係,並將執行期的實體物件持久化到資料庫中。
2.使用JPA的優勢
2.1標準化
JPA 是 JCP 組織釋出的 Java EE 標準之一,因此任何聲稱符合 JPA 標準的框架都遵循同樣的架構,提供相同的訪問API,這保證了基於JPA開發的企業應用能夠經過少量的修改就能夠在不同的JPA框架下執行。
2.2容器級特性的支援
JPA框架中支援大資料集、事務、併發等容器級事務,這使得 JPA 超越了簡單持久化框架的侷限,在企業應用發揮更大的作用。
2.3簡單方便
JPA的主要目標之一就是提供更加簡單的程式設計模型:在JPA框架下建立實體和建立Java 類一樣簡單,沒有任何的約束和限制,只需要使用 javax.persistence.Entity進行註釋,JPA的框架和介面也都非常簡單,沒有太多特別的規則和設計模式的要求,開發者可以很容易的掌握。JPA基於非侵入式原則設計,因此可以很容易的和其它框架或者容器整合。
2.4查詢能力
JPA的查詢語言是面向物件而非面向資料庫的,它以面向物件的自然語法構造查詢語句,可以看成是Hibernate HQL的等價物。JPA定義了獨特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一種擴充套件,它是針對實體的一種查詢語言,操作物件是實體,而不是關係資料庫的表,而且能夠支援批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能夠提供的高階查詢特性,甚至還能夠支援子查詢。
2.4高階特性
JPA 中能夠支援面向物件的高階特性,如類之間的繼承、多型和類之間的複雜關係,這樣的支援能夠讓開發者最大限度的使用面向物件的模型設計企業應用,而不需要自行處理這些特性在關係資料庫的持久化。
更多的JPA知識可以自己相關學習下.
3.配置Spring Boot 資料來源和JPA配置
配置Spring Boot的maven依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId
Spring Boot的JPA配置
spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true
Spring Boot資料庫連線配置
spring.datasource.url=jdbc:mysql://localhost:3306/springboottest?useUnicode=true&characterEncoding=utf-8
4.建立測試實體類和測試方法
建立實體類User類(圖1位置)
@Entity @Table(name = "User") public class User { public User() { } public User(String username, int age) { this.username = username; this.age = age; } @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column private String username; @Column private int age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
定義介面,繼承JpaRepository(圖2位置)
public interface TestUserDao extends JpaRepository<User, Integer> {}
寫入增刪改查程式碼於測試類中(圖3所示)
@RunWith(SpringRunner.class) @SpringBootTest public class SpringBootDemo8ApplicationTests { @Test public void contextLoads() { } @Autowired private TestUserDao testUserDao; @Test public void insert() { User user= new User(); user.setUsername("zhang san"); user.setAge(23); testUserDao.save(user); } @Test public void update() { User user = new User(); user.setId(1); user.setAge(18); user.setUsername("李四"); testUserDao.save(user); } @Test public void select() { Optional<User> user = testUserDao.findById(1); System.out.println(user); } @Test public void delete() { testUserDao.deleteById(1); } }
執行insert方法,可以看到console面板輸出sql語句;檢視資料庫,能看到表已經被建立,同時插入了一條資訊
依次執行以下幾個測試方法,都能看到修改、查詢和刪除生效,此處配置已經都OK.
4. Spring JpaRepository其他查詢方式
除了以上基礎的CRUD操作外,我們可以查詢Spring Data JPA文件中找到很多使用方法,例如拼接兩個條件的查詢,我們可以在TestUserDao中建立介面方法
User findByUsernameAndAge(String string, int i);
,然後使用中呼叫此方法傳入使用者名稱和年齡查詢.如果在API中提供的查詢仍然無法滿足我們的查詢的話,我們可以在TestUserDao寫入如下方法
@Query("select t from User t where t.username = ?1") User findByUsername(String username);
在測試類中,寫入方法
@Test public void findByUsername() { User user = testUserDao.findByUsername("李四"); System.out.println(user); }
執行結果
此外,Spring JpaRepository還有其他很多方便的使用方法,有時間可以多瞭解下,這裡就不多說.