科技新知

這節,我們將會使用spring-data-jpa,寫一個業務上的資料庫模組,提供資料表的存取,讓你的好同僚可以直接使用。這樣可以在多模組的環境中,減少同一個資料表在不同地方重複又重複地重定義。將來要更新,也可以使用jar檔的方式發佈。

下戴模版

我們跟上節一樣,使用Spring Initializr (Maven) 下載模版,但細節筆者就不再講啦。Dependency主要選擇

  • H2 Database
  • Spring Data JPA

對pom.xml作一些微調,並把spring-boot-start-data-jpa,h2改為只在測試中生效。

並把Java檔案搬一搬位置

# old location
src/main/java/io/github/macauyeah/springboot/tutorial/springbootdatatest/SpringBootDataTestApplication.java
src/main/resources/application.properties
# new location
src/test/java/io/github/macauyeah/springboot/tutorial/springbootdatatest/SpringBootDataTestApplication.java
src/test/resources/application.properties
 

以上的操作,主要是因為我們的目標是提供Schema,或者叫資料表規格。其他用於做連線的操作,我們不需要打包在jar內。所以把那些次要的東西都放在test資料夾中。我們這時可以先用mvn test指令,確保一切功能還是正常。

Entity folder

然後我們入正題,在pom.xml中加入hibernate-core,spring-data-jpa,

然後在main資料夾下加入 Entity、Repository,例如前述用過的Apple和AppleRepo,最後資料夾就像是這樣。

.
|-- pom.xml
|-- src
|   |-- main
|   |   `-- java
|   |       `-- io
|   |           `-- github
|   |               `-- macauyeah
|   |                   `-- springboot
|   |                       `-- tutorial
|   |                           `-- springbootdatatest
|   |                               |-- Apple.java
|   |                               `-- AppleRepo.java
|   `-- test
|       |-- java
|       |   `-- io
|       |       `-- github
|       |           `-- macauyeah
|       |               `-- springboot
|       |                   `-- tutorial
|       |                       `-- springbootdatatest
|       |                           |-- SpringBootDataTestApplication.java
|       |                           `-- SpringBootDataTestApplicationTests.java
|       `-- resources
|           `-- application.properties
 

然後我們在Test Case中使用AppleRepo

@SpringBootTestclassSpringBootDataTestApplicationTests {
	@AutowiredAppleRepoappleRepo;

	@TestvoidcontextLoads() {
		Appleapple = newApple();
		apple.setUuid(UUID.randomUUID().toString());
		apple.setWeight(100.0);
		apple.setGravity(1000.0);
		appleRepo.save(apple);
	}
}
 

這個跟前述02-spring-data-jpa最大的差別,就是我們的main中只有Entity相關的Class,我們發佈jar,別人引用我們的class,別人不會解發其他不相干的商業邏輯。假如發佈02的例子,因為Spring有自動初始化Component的原因,很可能會誤觸發02中的BasicApplicationRunner.java

Source Code

spring boot data test

馬交野


4DX  侏羅紀世界:重生
學姊是男孩劇場版:雨後天晴
4DX  F1電影
雄獅少年2
MX4D F1電影
F1 電影
英語版  馴龍記
野黨
IMAX with Laser F1電影
器子
F1電影
武士撈過界
愉快動物餅大電影
英語版  史迪仔
私家偵探
殺神John Wick之芭蕾殺姬
不赦之罪
史迪仔 英語版
殺神JOHN WICK外傳:芭蕾殺姬
28 年後
人工殺姬 2.0
職業特工隊:最終清算
侏羅紀世界:重生
馴龍記
28年後
史迪仔
死神來了:血脈
獵金•遊戲
破.地獄 加長版
4DX  侏羅紀世界:重生