1. 程式人生 > >Spring Boot(四)——Spring Data JPA

Spring Boot(四)——Spring Data JPA

一、Spring Data簡介

Spring Data 專案的目的是為了簡化構建基於 Spring 框架應用的資料訪問技術,包括非關係資料庫、 Map-Reduce 框架、雲資料服務等等;另外也包含對關係資料庫的訪問支援。

Spring Data 包含多個子專案:

  • Spring Data Commons
  • Spring Data JPA
  • Spring Data KeyValue
  • Spring Data LDAP
  • Spring Data MongoDB
  • Spring Data REST
  • Spring Data Redis
  • Spring Data for Apache Cassandra
  • Spring Data Elasticsearch (community module)

Spring Data

1、SpringData的特點

SpringData為我們提供使用統一的API來對資料訪問層進行操作;這主要是Spring Data Commons專案來實現的。Spring Data Commons讓我們在使用關係型或者非關係型資料訪問 技術時都基於Spring提供的統一標準,標準包含了CRUD(建立、獲取、更新、刪除)、查詢、 排序和分頁的相關操作。

2、統一的Repository介面

Repository<T, ID extends Serializable>:統一介面

RevisionRepository<T, ID extends Serializable, N extends Number & Comparable>:基於樂觀 鎖機制

CrudRepository<T, ID extends Serializable>:基本CRUD操作

PagingAndSortingRepository<T, ID extends Serializable>:基本CRUD及分頁

Spring Data JPA

3、提供資料訪問模板類 xxxTemplate;

如:MongoTemplate、RedisTemplate等

4、JPA與Spring Data

1)、JpaRepository基本功能
編寫介面繼承JpaRepository既有crud及分頁等基本功能
2)、定義符合規範的方法命名
在介面中只需要宣告符合規範的方法,即擁有對應的功能
3)、@Query自定義查詢,定製查詢SQL
4)、Specifications查詢(Spring Data JPA支援JPA2.0的Criteria查詢)

二、Spring Boot 整合Spring Data JPA

1)、引入spring-boot-starter-data-jpa

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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


        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

2)、配置檔案列印SQL語句

spring:
  datasource:
#   資料來源基本配置
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/crud
  jpa:
    hibernate:
#    更新或者建立資料表結構,	在沒有資料表的時候會自動建立
      ddl‐auto: update
# 控制檯顯示SQL
    show‐sql: true

3)、建立Entity標註JPA註解

import javax.persistence.*;

@Entity//告訴JPA這是一個實體類(和資料表對映的類)
@Table(name="tbl_user")//@Table來指定和哪個資料表對應;如果省略預設表名就是user;
public class User {

    @Id //這是一個主鍵
    @GeneratedValue(strategy = GenerationType.IDENTITY)//自增主鍵
    private Integer id;

    @Column(name = "last_name", length = 50) //這是和資料表對應的一個列
    private String lastName;
    @Column //省略預設列名就是屬性名
    private String email;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

4)、建立Repository介面繼承JpaRepository

import com.sb.data.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;


//繼承JpaRepository來完成對資料庫的操作
public interface UserRepository extends JpaRepository<User,Integer> {

}

5)、測試方法

@RunWith(SpringRunner.class)
@SpringBootTest
public class DataApplicationTests {

    @Resource
    private UserRepository userRepository;

    @Test
    public void contextLoads() {
    }

    @Test
    public void getUserList() {
        List<User> list = userRepository.findAll();
        for (User u :
                list) {
            System.out.println(u.getId() + "-" + u.getEmail() + "-" + u.getLastName());
        }
    }
}

三、Spring Data JPA的使用

spring data jpa使用詳解