Define Person Entity
首先為了使用JPA,必需先引入Hibernate的ORM機制
先透過一些annotation定義Person這個Entity
基本寫法如下:
- @Entity:宣告這個class是一個Entity
- @Table:宣告這個Person class對應實際DB的Table名為name=?
- @Id:宣告此屬性為對應Table的primary key
- @GeneratedValue:宣告此屬性為Table的 sequence,可交由程式自動產生
- @Column:宣告此屬性對應Table的什麼欄位name=?
以上,因為class及屬性命名已經對應了實際的Table名與欄位
可以省略為以下
注意上面多建了一個不帶Id的建構子,因為我們有使用@GeneratedValue
可以讓程式自動產生 sequence
接著要建立管理Entity的class,統稱為repository
如下圖,建一個叫PersonJpaRepository於jpa目錄下
基本定義內容如下:
實際寫出來
透過EntityManager的find方法代入Person實例與PK
完成後我們將 DatabaseDemoApplication.java改名為:
SpringJDBCDemoApplication.java以區別JPA,並複製一個用JPA命名
現在要使用JPA的部分,避免Spring scan出問題
暫將JDBC那個@SpringBootApplication註解
並將由SpringJDBCDemoApplication.java複製出來的
JPADemoApplication.java改寫為注入PersonJpaRepository
執行JPADemoApplication.java
WHY?
因為有了以上JPA的設定,Spring會為了我們create Table
所以我們只要INSERT資料就好
所以要把data.sql裡的Person create語法註解,只留INSERT:
再次執行JPADemoApplication.java
可以再更進一步將jpa組織的SQL呈現出來
輸入:spring.jpa.show-sql=true 於application.properties
再次執行JPADemoApplication.java得:
看起來他會先drop該table再重新建立person table