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

1、接口方法整理速查sql

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

 

2、五個接口詳解 緩存

一、CrudRepository接口。ide

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

複製代碼
@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();//刪除全部 (後臺執行時,一條一條刪除)
}
複製代碼

 

二、PagingAndSortingRepository接口。code

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

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

 

三、JpaRepository接口。blog

該接口繼承了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。

 

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

 

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

 

 

關鍵字 方法命名 sql where字句
And findByNameAndPwd where name= ? and pwd =?
Or findByNameOrSex where name= ? or sex=?
Is,Equals findById,findByIdEquals where id= ?
Between findByIdBetween where id between ? and ?
LessThan findByIdLessThan where id < ?
LessThanEquals findByIdLessThanEquals where id <= ?
GreaterThan findByIdGreaterThan where id > ?
GreaterThanEqual findByAgeGreaterThanEqual where age >= ?
After findByIdAfter where id > ?
Before findByIdBefore where id < ?
IsNull findByNameIsNull where name is null
isNotNull,NotNull findByNameNotNull where name is not null
Like findByNameLike where name like ?
NotLike findByNameNotLike where name not like ?

StartingWith

findByNameStartingWith where name like '?%'
EndingWith findByNameEndingWith where name like '%?'
Containing findByNameContaining where name like '%?%'
OrderBy findByIdOrderByXDesc where id=? order by x desc
Not findByNameNot where name <> ?
In findByIdIn(Collection<?> c) where id in (?)
NotIn findByIdNotIn(Collection<?> c) where id not in (?)
True

findByAaaTue

where aaa = true
False findByAaaFalse where aaa = false
IgnoreCase findByNameIgnoreCase where UPPER(name)=UPPER(?)
top findTop100 top 10/where ROWNUM <=10

示例:

 

// demo /**
*根據comId和state查詢從導入初始值開始到生效時間最新的記錄
 * <p>
 * 2017年7月13日13:37:49 * xj * * @param comId 公司代碼 * @param state 狀態爲1爲刪除的狀態 * @param effectTimeStart 固定值1970-01-01 * @param effectTime 生效時間 * @return */  List<CompanyIndustry> findTop1ByComIdAndStateAndEffectTimeBetweenOrderByEffectTimeDesc (String comId , Integer state , Date effectTimeStart , Date effectTime) ;   
相關文章
相關標籤/搜索