spring boot訪問數據庫


1. Spring JAP 基本使用說明:

Spring boot 訪問數據庫基本上都是通過Spring JPA封裝的Bean作為API的,Spring JPA 將訪問數據庫通過封裝,只要你的類實現了JPARepository這個接口,它里面對外公開了一部分接口,可以供你實現部分功能。如圖:

它里面提供了可以傳Id進行單個查詢,也可以提供類進行匹配查詢等。

由於JPARepository實現了,PagingAndSortingRepository,這個接口是用來實現分頁用的,這個接口又實現了CrudRepository 這個增刪改查的這個接口,在這個接口里面,有下面的對外接口:

所以當你實現了JPARespository接口之后,就可以對基本的增刪改查進行處理了。

如上圖調用所示。

2. Spring JPA 特殊用法:

當你看了上面的例子之后,你發現只是基本的一些操作,但是如果你想通過用戶名查詢怎么查詢呢?

所以JPA還提供了一種方法叫自定義方法:如

這種方法JPA框架也會自動解析成根據傳入的參數name 去User表中查找,具體框架的解析說法如下:

架在進行方法名解析時,會先把方法名多余的前綴截取掉,比如 find、findBy、read、readBy、get、getBy,然后對剩下部分進行解析。並且如果方法的最后一個參數是 Sort 或者 Pageable 類型,也會提取相關的信息,以便按規則進行排序或者分頁查詢。

在創建查詢時,我們通過在方法名中使用屬性名稱來表達,比如 findByUserAddressZip ()。框架在解析該方法時,首先剔除 findBy,然后對剩下的屬性進行解析,詳細規則如下(此處假設該方法針對的域對象為 AccountInfo 類型):

  • 先判斷 userAddressZip (根據 POJO 規范,首字母變為小寫,下同)是否為 AccountInfo 的一個屬性,如果是,則表示根據該屬性進行查詢;如果沒有該屬性,繼續第二步;
  • 從右往左截取第一個大寫字母開頭的字符串(此處為 Zip),然后檢查剩下的字符串是否為 AccountInfo 的一個屬性,如果是,則表示根據該屬性進行查詢;如果沒有該屬性,則重復第二步,繼續從右往左截取;最后假設 user 為 AccountInfo 的一個屬性;
  • 接着處理剩下部分( AddressZip ),先判斷 user 所對應的類型是否有 addressZip 屬性,如果有,則表示該方法最終是根據 "AccountInfo.user.addressZip" 的取值進行查詢;否則繼續按照步驟 2 的規則從右往左截取,最終表示根據 "AccountInfo.user.address.zip" 的值進行查詢。

在查詢時,通常需要同時根據多個屬性進行查詢,且查詢的條件也格式各樣(大於某個值、在某個范圍等等),Spring Data JPA 為此提供了一些表達條件查詢的關鍵字,大致如下:

  • And --- 等價於 SQL 中的 and 關鍵字,比如 findByUsernameAndPassword(String user, Striang pwd);
  • Or --- 等價於 SQL 中的 or 關鍵字,比如 findByUsernameOrAddress(String user, String addr);
  • Between --- 等價於 SQL 中的 between 關鍵字,比如 findBySalaryBetween(int max, int min);
  • LessThan --- 等價於 SQL 中的 "<",比如 findBySalaryLessThan(int max);
  • GreaterThan --- 等價於 SQL 中的">",比如 findBySalaryGreaterThan(int min);
  • IsNull --- 等價於 SQL 中的 "is null",比如 findByUsernameIsNull();
  • IsNotNull --- 等價於 SQL 中的 "is not null",比如 findByUsernameIsNotNull();
  • NotNull --- 與 IsNotNull 等價;
  • Like --- 等價於 SQL 中的 "like",比如 findByUsernameLike(String user);
  • NotLike --- 等價於 SQL 中的 "not like",比如 findByUsernameNotLike(String user);
  • OrderBy --- 等價於 SQL 中的 "order by",比如 findByUsernameOrderBySalaryAsc(String user);
  • Not --- 等價於 SQL 中的 "! =",比如 findByUsernameNot(String user);
  • In --- 等價於 SQL 中的 "in",比如 findByUsernameIn(Collection<String> userList) ,方法的參數可以是 Collection 類型,也可以是數組或者不定長參數;
  • NotIn --- 等價於 SQL 中的 "not in",比如 findByUsernameNotIn(Collection<String> userList) ,方法的參數可以是 Collection 類型,也可以是數組或者不定長參數。

3. 使用@Query 注解

@Query 注解類似於mybatis 中的寫Sql 語句。

同時也可以傳入分頁的參數,參數可以用?1,?2,?3 分別代表占位符。

完了。

 

 

 
        
 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM