一、Spring-Data-Jpa 初體驗(基於SpringBoot)
閒話少說,首先動起來(基於springboot+gradle):
1、引入依賴
dependencies {
compile 'org.springframework.boot:spring-boot-starter-data-jpa:2.1.1.RELEASE'
testCompile 'org.springframework.boot:spring-boot-starter-test:2.1.1.RELEASE'//測試用
compileOnly 'org.projectlombok:lombok:1.16.20'//簡化程式碼
//引入資料庫驅動
compile 'mysql:mysql-connector-java:8.0.13'
}
2、編寫Entity-實體類
/** * 使用者表 */ @Data @Entity @Table(name = "user") // 指定對應的表(最好指定明確,越多不了幾個單詞) public class User { @Id //標註該欄位為primary key @GeneratedValue(strategy = GenerationType.IDENTITY) //定義主鍵生成策略的型別:此處我選擇的是主鍵由資料庫自動生成(主要是自動增長型) @Column(name = "id") // 指定資料列(最好指定,也多不了幾個單詞) privateLong id; @Column(name = "username",nullable = false) //設定該列不能為空 private String username; @Column(name = "phone") private String phone; @Column(name = "email") private String email; @Column(name = "create_time",nullable = false) private Date createTime; @Column(name= "last_update_time",nullable = false) private Date lastUpdateTime; } /** * GenerationType 說明 * TABLE:使用一個特定的資料庫表格來儲存主鍵。 * SEQUENCE:根據底層資料庫的序列來生成主鍵,條件是資料庫支援序列。 * IDENTITY:主鍵由資料庫自動生成(主要是自動增長型) * AUTO:主鍵由程式控制。 */
PS:一般來說,JPA“實體”類在persistence.xml
檔案中指定。使用Spring Boot,此檔案不是必需的,而是使用“實體掃描”。預設情況下,將搜尋主配置類(註釋為@EnableAutoConfiguration
或者@SpringBootApplication
)下的所有包 。
3、定義Repositry介面
/** * 定義實體類介面 */ public interface UserRepo extends CrudRepository<User, Long> { } /** * PS: 可以直接繼承Repository介面,但是CrudRepository介面已經封裝好了很多增刪改查的方法,所以直接繼承CrudRepository介面更簡單, * 當然,如果你要自己寫很多方法的話也行 * 另外,我跟喜歡用JpaRepository,裡面有更豐富的jpa封裝,筆者將在後續隨筆中分享 */
4、配置資料庫 (application.properties)
spring.datasource.url=jdbc:mysql://*.*.*.*:3306/demo-spring-data-jpa spring.datasource.username=**** spring.datasource.password=*** # spring.datasource.driver-class-name=com.mysql.jdbc.Driver //可以不用指定driver,因為java spi
ps:java-spi簡介
當服務的提供者,提供了服務介面的一種實現之後,在jar包的META-INF/services/目錄裡同時建立一個以服務介面命名的檔案。該檔案裡就是實現該服務介面的具體實現
類。而當外部程式裝配這個模組的時候,就能通過該jar包META-INF/services/裡的配置檔案找到具體的實現類名,並裝載例項化,完成模組的注入。
基於這樣一個約定就能很好的找到服務介面的實現類,而不需要再程式碼裡制定。
jdk提供服務實現查詢的一個工具類:java.util.ServiceLoader
5、 使用test測試這段程式碼
import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import top.djlee.jpa.user.model.User; import java.util.Date; @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest public class UserRepoTest { @Autowired private UserRepo userRepo; @Test public void save() { User user = new User(); user.setUsername("Jpa測試"); user.setCreateTime(new Date()); user.setLastUpdateTime(user.getCreateTime()); userRepo.save(user); } }
執行這段程式碼後,你就可以看到你的資料庫中有如下內容:
表示插入成功!
當然,測試之前你要寫SpringBoot啟動類(否則程式是不會執行的喲)
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args){ SpringApplication.run(Application.class); } }
另外,介紹一個開掛的功能:Creating and Dropping JPA Databases - 自動建立資料庫表
只需要在application.properties 中加入如下配置:
spring.jpa.hibernate.ddl-auto=create
然後,你刪除user表試試,你會發現程式不僅可以執行,還建立了相應的表格,還插入了資料
不過,不建議使用該功能,因為我們不希望每次啟動程式就對資料庫進行更改,萬一有一天程式碼有點錯誤,那就會引起事故了!
當然,你可以看看CrudRepository中其他的方法,構造資料去玩一玩,這裡就不做贅述了。
示例程式碼:https://gitee.com/top-djlee/demo-spring-data-jpa.git