1. 程式人生 > >JPA和Spring Boot Data JPA 介紹

JPA和Spring Boot Data JPA 介紹

一、簡介

JPA,即Java Persistence API,是一種標準的技術,但不是一種框架,他可以讓你將物件對映到關係型資料庫中。

Spring Data JPA是Spring Data系列的一部分,可以輕鬆實現基於JPA的儲存庫。該模組處理對基於JPA的資料訪問層的增強的支援。這使得使用資料訪問技術構建Spring供電的應用程式變得更加容易。

Spring Data JPA旨在通過減少實際需要的數量來顯著提高資料訪問層的實現。作為開發人員,您編寫儲存庫介面(包括自定義查詢器方法),Spring將自動提供實現。

二、Spring Data JPA的特徵

 三、Spring Data JPA具體使用

Spring Data 儲存庫抽象概念的目標是顯著的減少為各種永續性儲存實現資料訪問層所需的樣板程式碼的數量。

  • 核心概念

Spring資料儲存庫抽象中的中心介面是儲存庫。它需要域類來管理,以及域類的ID型別作為型別的引數。這個介面主要作為一個標記介面來捕獲要使用的型別,並幫助您發現擴充套件這個介面的介面。CrudRepository為正在管理的實體類提供了複雜的CRUD功能。

  •  CurdRepository介面如下:
package org.springframework.data.repository;

import java.util.Optional;

@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
    //儲存給定的實體類
    <S extends T> S save(S var1);

    //儲存所有給定的實體類
    <S extends T> Iterable<S> saveAll(Iterable<S> var1);

    //根據給定的ID查詢實體類
    Optional<T> findById(ID var1);

    //根據給定的ID判斷是否存在
    boolean existsById(ID var1);

    //返回所有的實體類
    Iterable<T> findAll();
    
    //返回根據給定的Id對應的實體類
    Iterable<T> findAllById(Iterable<ID> var1);

    //返回總數
    long count();

    //根據給定的ID進行刪除
    void deleteById(ID var1);
    
    //根據給定的實體進行刪除
    void delete(T var1);

    //根據給定的所有實體進行刪除
    void deleteAll(Iterable<? extends T> var1);

    //刪除所有
    void deleteAll();
}

此外也提供了持久化技術特定的抽象,比如JpaRepository或者MongoRepository,這些介面繼承了CrudRepository,同時也暴露了除了CrudRepository一般的永續性技術無關的一些介面功能。

在JpaRepository上邊有一個抽象的PagingAndSortingRepository 介面,這個介面添加了額外的方法分頁訪問實體。

  • PagingAndSortingRepository 介面如下:
package org.springframework.data.repository;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {

    //按照排序規則查詢所有實體
    Iterable<T> findAll(Sort var1);

    //分頁查詢
    Page<T> findAll(Pageable var1);
}
  • JpaRepository介面如下:
package org.springframework.data.jpa.repository;

import java.util.List;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.QueryByExampleExecutor;

@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
    List<T> findAll();

    List<T> findAll(Sort var1);

    List<T> findAllById(Iterable<ID> var1);

    <S extends T> List<S> saveAll(Iterable<S> var1);

    void flush();

    <S extends T> S saveAndFlush(S var1);

    void deleteInBatch(Iterable<T> var1);

    void deleteAllInBatch();

    T getOne(ID var1);

    <S extends T> List<S> findAll(Example<S> var1);

    <S extends T> List<S> findAll(Example<S> var1, Sort var2);
}