Spring Data JPA 簡單查詢--接口方法

一、接口方法整理速查

    下表針對於簡單查詢,即JpaRepository接口(繼承了CrudRepository接口、PagingAndSortingRepository接口)中的可訪問方法進行整理。(1)先按照功能進行分類整理,分爲保存、刪除、查找單個、查找多個、其他5類。(2)再將不建議使用的方法置灰,此類方法多爲CrudRepository接口、PagingAndSortingRepository接口中定義,後來JpaRepository接口中又定義了替代方法,更方便使用,比如:查找多個對象時,返回 List 比返回 Iterable 更容易處理。

 

二、五個接口詳解 

1、CrudRepository接口。

其中T是要操作的實體類,ID是實體類主鍵的類型。該接口提供了11個常用操作方法。

複製代碼
@NoRepositoryBean  
public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> { 

    <S extends T> S save(S entity);//保存  
    <S extends T> Iterable<S> save(Iterable<S> entities);//批量保存  

    T findOne(ID id);//根據id 查詢一個對象。返回對象本身,當對象不存在時,返回null   
    Iterable<T> findAll();//查詢所有的對象  
    Iterable<T> findAll(Iterable<ID> ids);//根據id列表 查詢所有的對象  

    boolean exists(ID id);//根據id 判斷對象是否存在 
    long count();//計算對象的總個數  

    void delete(ID id);//根據id 刪除  
    void delete(T entity);//刪除一個對象 
    void delete(Iterable<? extends T> entities);//批量刪除,集合對象(後臺執行時,一條一條刪除
    void deleteAll();//刪除所有 (後臺執行時,一條一條刪除
}
複製代碼

 

2、PagingAndSortingRepository接口。

該接口繼承了CrudRepository接口,提供了兩個方法,實現了分頁和排序的功能了。

@NoRepositoryBean  
public interface PagingAndSortingRepository<T, ID extends Serializable> extends CrudRepository<T, ID> {  
Iterable
<T> findAll(Sort sort);// 僅排序 Page<T> findAll(Pageable pageable);// 分頁和排序 }

 

3、JpaRepository接口。

該接口繼承了PagingAndSortingRepository接口。

同時也繼承QueryByExampleExecutor接口,這是個用“實例”進行查詢的接口,後續再寫文章詳細說明。

複製代碼
@NoRepositoryBean
public interface JpaRepository<T, ID extends Serializable>
        extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
    
    List<T> findAll(); //查詢所有對象,返回List
    List<T> findAll(Sort sort); //查詢所有對象,並排序,返回List
    List<T> findAll(Iterable<ID> ids); //根據id列表 查詢所有的對象,返回List

    void flush(); //強制緩存與數據庫同步 

    <S extends T> List<S> save(Iterable<S> entities); //批量保存,並返回對象List
    <S extends T> S saveAndFlush(S entity); //保存並強制同步數據庫

    void deleteInBatch(Iterable<T> entities); //批量刪除 集合對象(後臺執行時,生成一條語句執行,用多個or條件)
    void deleteAllInBatch();//刪除所有 (執行一條語句,如:delete from user)

    T getOne(ID id); //根據id 查詢一個對象,返回對象的引用(區別於findOne)。當對象不存時,返回引用不是null,但各個屬性值是null
    
    @Override
    <S extends T> List<S> findAll(Example<S> example); //根據實例查詢
    @Override
    <S extends T> List<S> findAll(Example<S> example, Sort sort);//根據實例查詢,並排序。

}
複製代碼

 幾點說明:

(1)幾個查詢、及批量保存方法,和 CrudRepository 接口相比,返回的是 List,使用起來更方便。

(2)增加了 InBatch 刪除, 實際執行時,後臺生成一條sql語句,效率更高些。相比較而言,CrudRepository 接口的刪除方法,都是一條一條刪除的,即便是 deleteAll 也是一條一條刪除的。

(3)增加了 getOne() 方法,切記,該方法返回的是對象引用,當查詢的對象不存在時,它的值不是Null

 

4、JpaSpecificationExecutor接口
該接口提供了對JPA Criteria查詢(動態查詢)的支持。這個接口很有用,具體不粘源碼了。

參考:

http://www.cnblogs.com/derry9005/p/6282571.html

http://www.cnblogs.com/dreamroute/p/5173896.html

 

5、Repository接口
這個接口是最基礎的接口,只是一個標誌性的接口,沒有定義任何的方法,那這個接口有什麼用了?既然Spring data JPA提供了這個接口,自然是有它的用處,例如,我們有一部分方法是不想對外提供的,比如我們只想提供增加和修改方法,不提供刪除方法,那麼前面的幾個接口都是做不到的,這個時候,我們就可以繼承這個接口,然後將CrudRepository接口裏面相應的方法拷貝到Repository接口就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章