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) ;