1. 程式人生 > >Spring-Data-JPA 自定義查詢方法底層如何處理

Spring-Data-JPA 自定義查詢方法底層如何處理

public interface UserDao extends JpaRepository<User, Integer>{

        //自定義查詢
/**
* 方法簽名已經告訴spring-data-jpa足夠的資訊來建立這個方法的實現了
* spring-data會檢查Repository介面中所有的方法,解析方法的名稱,並且基於
* 被持久化的物件來試圖推測方法的目的。

* findUserByName 是如何對映的在springdata中的,springdata允許在方法名稱使用四個動詞:get,find,read
* 和count.其中get,find,read是同義的,這個是三個動詞對應Repository方法都會查詢資料並且
* 返回物件,而動詞count則會返回匹配的物件數量,而不是物件本身。

* findUserByName方法非常簡單,需要屬性name來匹配查詢User,springdata的處理也更加有意思,
* Repository方法有有個動詞,一個可選的主題(Subject),關鍵詞By以及一個斷言所組成

* find是查詢動詞  User為主題  Name為斷言,對於大多數場景主題是會省略的

* findUserByName中by後面的Name為斷言也就是查詢的引數,在斷言中會有一個或多個限制結果的條件。如果沒有就預設按照等於去查詢。


*/

        User findUserByName(String name);

    /**
     * 功能:通過姓名進行模糊查詢集合
     * 此時引數傳遞的形式為 "%李四%"
     */
    List<User>  findByNameIsLike(String name);

      /**
     * 功能:查詢大於或等於引數為年齡的集合
     * 
     * findByAgeIsGreaterThanEqual:中斷言為Age屬性也就是查詢的查詢,限制條件是IsGreaterThanEqual大於或等於
     */
    List<User> findByAgeIsGreaterThanEqual(Integer age);
     /**
      * 功能:通過id降序排列
      * 不能寫成findByIdOrderByDesc:這樣寫的話,是通過id查詢物件集合,並且結果以id的降序排列
      */
    List<User> findByOrderByIdDesc();

}

以下來自官方手冊:

                                                                               微信公眾號: 

                                               

                                                                             JAVA程式猿成長之路

                                                       分享學習資源,學習方法,記錄程式設計師生活。