SpringDataJpa基礎篇2:Repository介面及子介面
阿新 • • 發佈:2018-12-21
1、Repository介面概述
Repository介面是Spring Data的一個核心介面,它不提供任何方法,開發者需要在自己定義的介面中宣告需要的方法。
Spring Data可以讓我們只定義介面,只要遵循 Spring Data的規範,就無需寫實現類。與繼承 Repository等價的一種方式,就是在持久層介面上使用@RepositoryDefinition註解,併為其指定domainClass和idClass 屬性。如下兩種方式是完全等價的。
package org.springframework.data.repository; import org.springframework.stereotype.Indexed; /** *<T, ID>中的T表示實體類的型別,ID表示註解的型別 */ @Indexed public interface Repository<T, ID> { }
2、Repository的子介面
基礎的Repository提供了最基本的資料訪問功能,Repository介面僅僅是一個標識,表明任何繼承它的均為倉庫介面類。
Repository介面的子介面:
(1)CrudRepository介面:繼承Repository介面,實現了一組CRUD相關的方法;
(2)PagingAndSortingRepository介面:繼承CrudRepository介面,實現了一組分頁排序相關的方法;
(3)JpaRepository介面:繼承 PagingAndSortingRepository介面,實現一組 JPA 規範相關的方法;
(4)JpaSpecificationExecutor介面
3、CrudRepository介面
package org.springframework.data.repository; import java.util.Optional; /** * CrudRepository介面繼承Repository介面 */ @NoRepositoryBean public interface CrudRepository<T, ID> extends Repository<T, ID> { //儲存一個實體類 <S extends T> S save(S entity); //儲存一個集合 <S extends T> Iterable<S> saveAll(Iterable<S> entities); //根據主鍵id查詢得到一個集合 Optional<T> findById(ID id); // 主鍵id是否存在 boolean existsById(ID id); //查詢所有的 Iterable<T> findAll(); //根據id集合獲取一個集合 Iterable<T> findAllById(Iterable<ID> ids); //統計數量 long count(); //根據主鍵id刪除 void deleteById(ID id); //根據實體類刪除 void delete(T entity); //根據實體類集合刪除多個 void deleteAll(Iterable<? extends T> entities); //刪除所有 void deleteAll(); }
4、PagingAndSortingRepository介面
package org.springframework.data.repository;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
/**
*
* @see Sort排序
* @see Pageable分頁類
* @see Page 分頁物件
*/
@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
//查詢所有並排序
Iterable<T> findAll(Sort sort);
/**
*
* @param pageable
* @return返回一個Page物件的一個實體
*/
Page<T> findAll(Pageable pageable);
}
【注意】其實Pageable 物件已經包含了排序Sort 的資訊。
5、JpaRepository介面
package org.springframework.data.jpa.repository;
import java.util.List;
import javax.persistence.EntityManager;
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 sort);
/*
* 根據主鍵id集合獲取所有實體類集合
*/
List<T> findAllById(Iterable<ID> ids);
<S extends T> List<S> saveAll(Iterable<S> entities);
void flush();
<S extends T> S saveAndFlush(S entity);
void deleteInBatch(Iterable<T> entities);
void deleteAllInBatch();
/*
* 根據主鍵id獲取實體類
*/
T getOne(ID id);
/*
* 繼承PagingAndSortingRepository類的方法
*/
@Override
<S extends T> List<S> findAll(Example<S> example);
/*
* 繼承PagingAndSortingRepository類的方法
*/
@Override
<S extends T> List<S> findAll(Example<S> example, Sort sort);
}