Spring Data JPA簡單使用

飲茶T發表於2019-01-01

Spring Data JPA運算元據庫

這份教程教你用Spring Data JPA從關聯式資料庫mysql中儲存和提取資料。總結來自https://spring.io/guides/gs/accessing-data-jpa/

1.用Maven構建工程

新增依賴

<!– spring boot data jpa –>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

 

<!– mysql –>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

 

2.Application properties引數設定

spring.datasource.url=jdbc:mysql://localhost:3306/spp?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=liuwb123
#spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

#JPA Configuration:
spring.jpa.database=MySQL
spring.jpa.show-sql=true  
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto = update

 

3.定義一個簡單的實體

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

@Entity

public class Customer {

 

    @Id

    @GeneratedValue(strategy=GenerationType.AUTO)

    private Long id;

    private String firstName;

    private String lastName;

 

    protected Customer() {}

 

    public Customer(String firstName, String lastName) {

        this.firstName = firstName;

        this.lastName = lastName;

    }

 

    @Override

    public String toString() {

        return String.format(

                “Customer[id=%d, firstName=`%s`, lastName=`%s`]”,

                id, firstName, lastName);

    }

}

這樣定義了一個有三個屬性的類,id,firstName和lastName,還包含了兩個構造器。其中預設構造器只為JPA使用,你不會直接用它,所以被protecred給修飾了。另外一個構造器你需要用它來創造例項,再將資料儲存到資料庫中。

這個類被@Entity註解,表明這是一個JPA實體。雖然缺少了@Tabel註解,但是這個實體依舊會被對映成一張名字為Customer資料庫的表。

Customer的id屬性被@Id給註解,JPA會把這個屬性識別為一個主鍵,除了被@Id註解,還被@GeneratedValue註解,表明這個屬性會以自增的方式生成值。

其他的兩個屬性firstName和lastName沒有被註解,這兩個屬性將會以同名的方式,對映成資料庫表中的欄位。

toString方法只是為了方便檢視customer類的屬性。

4.建立簡單的查詢介面

Spring Data JPA 聚焦於用JPA在關係型資料庫中儲存資料。Spring Data Jpa最具有特色的地方就是能夠自動地在執行時建立一張資料庫的表。

現在我們來看看它是怎樣的一個流程,建立一個介面引用Customer實體。

import java.util.List;

import org.springframework.data.repository.CrudRepository;

public interface CustomerRepository extends CrudRepository<Customer, Long> {

 

    List<Customer> findByLastName(String lastName);}

CustomerRepository繼承CrudRespository介面,父介面的引數設定為實體的類和實體主鍵的資料型別。通過擴充套件CrudRespository,CustomerRepository繼承了少數的方法,包括存資料,刪除資料和查詢Customer的實體。

Spring Data JPA 也允許你定義其他的查詢方法。例如,findByLastName方法。 引數需要以類名和類屬性命名。

Java應用程式中,你需要寫一個類去實現CustomerRepository介面。但是真正讓Spring Data JPA強大的,根本不需要實現這個介面,這件事情Spring Data JPA自動幫你實現了。

5.查詢資料

@RunWith(SpringRunner.class)
@SpringBootTest
public class LearnApplicationTests {
    // spring data jpa
    @Autowired
    CustomerRepository customerRepository;

    @Test
    public void contextLoads() {
        // 存資料
        customerRepository.save(new Customer(“jack”,“baur”));
        // 查資料
        List<Customer> customers = customerRepository.findByLastName(“baur”);
        System.out.println(customers.get(0).toString());
    }

}

 

6.總結

介面除了繼承CrudRepository還可以繼承JpaRepositoryPagingAndSortingRepository 

CrudRepository主要提供CRUD操作,PagingAndSortingRepository 提供翻頁和對資料進行排序,而JpaRepository提供批量操作的方法,除此之外JpaRepository擁有其他兩個的所有方法,所以繼承JpaRepository準沒錯。不過本次例子中繼承的是CrudRepository,專案地址,https://github.com/drinkTeaT/springboot。好了,bye~。

 

 

相關文章