1、Spring-Data-Jpa 初體驗(基於SpringBoot)

閒話少說,首先動起來(基於springboot+gradle):java

一、引入依賴mysql

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'
}

二、編寫Entity-實體類git

/**
 * 用戶表
 */
@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下的全部包 。spring

三、定義Repositry接口sql

/**
 * 定義實體類接口
 */
public interface UserRepo extends CrudRepository<User, Long> {
}

/**
 * PS: 能夠直接繼承Repository接口,可是CrudRepository接口已經封裝好了不少增刪改查的方法,因此直接繼承CrudRepository接口更簡單,
 * 固然,若是你要本身寫不少方法的話也行
 * 另外,我跟喜歡用JpaRepository,裏面有更豐富的jpa封裝,筆者將在後續隨筆中分享
 */

四、配置數據庫 (application.properties)數據庫

spring.datasource.url=jdbc:mysql://*.*.*.*:3306/demo-spring-data-jpa?characterEncoding=UTF-8&serverTimezone=GMT%2B8
spring.datasource.username=****
spring.datasource.password=****
#spring.datasource.driver-class-name=com.mysql.jdbc.Driver //能夠不用,java-spi

ps:java-spi簡介springboot

當服務的提供者,提供了服務接口的一種實現以後,在jar包的META-INF/services/目錄裏同時建立一個以服務接口命名的文件。該文件裏就是實現該服務接口的具體實現
類。而當外部程序裝配這個模塊的時候,就能經過該jar包META-INF/services/裏的配置文件找到具體的實現類名,並裝載實例化,完成模塊的注入。
基於這樣一個約定就能很好的找到服務接口的實現類,而不須要再代碼裏制定。
jdk提供服務實現查找的一個工具類:java.util.ServiceLoaderapp

五、 使用test測試這段代碼spring-boot

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

相關文章
相關標籤/搜索