之前我們學習的Repository都是Spring-Data為了兼容NoSQL而進行的一些抽象封裝,從JpaRepository開始是對關系型數據庫進行抽象封裝。JpaRepository位於spring-data-jpa項目下的repository包中,
繼承了PagingAndSortingRepository和QueryByExampleExecutor接口,因此也就擁它們的全部方法。並且將默認實現的查詢結果變成了List。並且新增了刷新更改到數據庫、保存並刷新、批量刪除等方法。使用方
法同之前的Repository一樣我們直接繼承它就好了,JpaRepository也是我們最常繼承的接口。
@NoRepositoryBean //不要生成該類的代理類 public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> { /* * 重寫父接口CrudRepository的方法,將查詢結果由Iterable變成List。 */ @Override List<T> findAll(); /* * 重寫父接口PagingAndSortingRepository的方法,將查詢結果由Iterable變成List。 */ @Override List<T> findAll(Sort sort); /* * 重寫父接口CrudRepository的方法,將查詢結果由Iterable變成List。 */ @Override List<T> findAllById(Iterable<ID> ids); /* * 重寫父接口CrudRepository的方法,將查詢結果由Iterable變成List。 */ @Override <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(); /** * 返回對具有給定標識符的實體的引用。根據JPA提供商的實現方式,這很可能總是返回一個實例, * 並在第一次訪問時拋出javax.persistence.EntityNotFoundException。其中一些會立即拒絕無效的標識符。 */ T getOne(ID id); /* * 重寫父接口QueryByExampleExecutor的方法,將查詢結果由Iterable變成List。 */ @Override <S extends T> List<S> findAll(Example<S> example); /* * 重寫父接口QueryByExampleExecutor的方法,將查詢結果由Iterable變成List。 */ @Override <S extends T> List<S> findAll(Example<S> example, Sort sort); }
源碼地址:https://github.com/caofanqi/study-spring-data-jpa