您好,登錄后才能下訂單哦!
一、接口方法整理速查
下表針對于簡單查詢,即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 <T, ID Serializable> CrudRepository<T, ID> { Iterable<T> findAll(Sort sort); Page<T> findAll(Pageable pageable);}
3、JpaRepository接口。
該接口繼承了PagingAndSortingRepository接口。
同時也繼承QueryByExampleExecutor接口,這是個用“實例”進行查詢的接口,后續再寫文章詳細說明。
@NoRepositoryBeanpublic 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查詢(動態查詢)的支持。這個接口很有用,具體不粘源碼了。
5、Repository接口
這個接口是最基礎的接口,只是一個標志性的接口,沒有定義任何的方法,那這個接口有什么用了?既然Spring data JPA提供了這個接口,自然是有它的用處,例如,我們有一部分方法是不想對外提供的,比如我們只想提供增加和修改方法,不提供刪除方法,那么前面的幾個接口都是做不到的,這個時候,我們就可以繼承這個接口,然后將CrudRepository接口里面相應的方法拷貝到Repository接口就可以了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。