1. 程式人生 > >一、Spring-Data-Jpa 初體驗(基於SpringBoot)

一、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") // 指定資料列(最好指定,也多不了幾個單詞)
    private
Long 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