亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot如何使用JPA實現查詢部分字段

發布時間:2021-08-27 13:33:17 來源:億速云 閱讀:356 作者:小新 欄目:開發技術

這篇文章主要介紹了SpringBoot如何使用JPA實現查詢部分字段,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

SpringBoot JPA查詢部分字段

用過JPA的都知道,只需要繼承JpaRepository 根據Jpa的函數命名規范寫出接口中的函數,不需要實現,底層就可以自動解析成各種數據庫的sql語句,進行增刪改查等操作。

自定義簡單的查詢方法

如findByUserName,findByUserNameOrEmail(String username, String email)等條件的屬性名稱與個數要與參數的位置與個數一一對應,JpaRepository能夠解析方法名自動生成sql語句

主要的語法是findXXBy,readAXXBy,queryXXBy,countXXBy, getXXBy后面跟屬性名稱即可

關鍵詞舉例對應的sql語句
AndfindByLastnameAndFirstname… where x.lastname = ?1 and x.firstname = ?2
OrfindByLastnameOrFirstname… where x.lastname = ?1 or x.firstname = ?2
Is,EqualsfindByFirstnameIs,findByFirstnameEquals… where x.firstname = ?1
BetweenfindByStartDateBetween… where x.startDate between ?1 and ?2
LessThanfindByAgeLessThan… where x.age < ?1
LessThanEqualfindByAgeLessThanEqual… where x.age ? ?1
GreaterThanfindByAgeGreaterThan… where x.age > ?1
GreaterThanEqualfindByAgeGreaterThanEqual… where x.age >= ?1
AfterfindByStartDateAfter… where x.startDate > ?1
BeforefindByStartDateBefore… where x.startDate < ?1
IsNullfindByAgeIsNull… where x.age is null
IsNotNull,NotNullfindByAge(Is)NotNull… where x.age not null
LikefindByFirstnameLike… where x.firstname like ?1
NotLikefindByFirstnameNotLike… where x.firstname not like ?1
StartingWithfindByFirstnameStartingWith… where x.firstname like ?1 (parameter bound with appended %)
EndingWithfindByFirstnameEndingWith… where x.firstname like ?1 (parameter bound with prepended %)
ContainingfindByFirstnameContaining… where x.firstname like ?1 (parameter bound wrapped in %)
OrderByfindByAgeOrderByLastnameDesc… where x.age = ?1 order by x.lastname desc
NotfindByLastnameNot… where x.lastname <> ?1
InfindByAgeIn(Collection ages)… where x.age in ?1
NotInfindByAgeNotIn(Collection age)… where x.age not in ?1
TRUEfindByActiveTrue()… where x.active = true
FALSEfindByActiveFalse()… where x.active = false
IgnoreCasefindByFirstnameIgnoreCase… where UPPER(x.firstame) = UPPER(?1)

這種方式很簡單,但也有很多缺陷,不夠靈活,不用擔心,Spring data jpa還支持自定義查詢語句。

  • 使用 @Query注解,添加JPQL語句,JPQL是一種面向對象的表達式語言,通過類名和屬性訪問,而不是數據庫中的表名和屬性,避免了不同數據庫語法的不同。

  • 在@Query中添加nativeQuery = true表示使用原生的sql語句,這時候就有要使用數據庫表名和字段名了。

  • 當涉及到刪除和修改在需要加上@Modifying.也可以根據需要添加 @Transactional對事物的支持,查詢超時的設置等。

使用JPA命名規范寫的函數能夠查詢出整個對象,而不能只查詢出一個或幾個字段,因為有時候我們只需要一個bean中的幾個字段就夠了,不需要全部的。

例如用戶表,根據id查姓名,就不需要把密碼等重要信息查出來了,因為這些信息封裝在一個對象中返回到前端是很危險的,即使沒有顯示,但也可以在瀏覽器上調試看到。

原生的sql當然可以做到,但是我們還想讓查詢出的結果封裝成一個對象,以便后續的操作。

那么自定義的JPQL就可以實現這個功能了。

例如有一個用戶表,如下:

@Entity
@Table(name = "yhb")
public class YHB {
    //用戶編號
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer yhbh;
    //用戶代碼(名字拼音縮寫)
    private String yhdm;
    //用戶名稱
    private String yhmc;
    //用戶密碼
    private String yhkl;
    //用戶部門編號
    private String yhbm;
    //用戶職務
    private String yhsf;
    //用戶手機號
    private String phone;
//省略構造函數和get set

現在需要根據部門編號查詢出這個部門所有人的用戶編號和用戶名稱,那么我們可以新建一個Model,就只有用戶編號和用戶名稱這兩個字段:

YhbModel.java

public class YhbModel implements Serializable {
    private Integer yhbh;
    //用戶名稱
    private String yhmc;

在用戶表的dao層可以這樣寫操作數據庫的方法:

@Repository
public interface YhbDao extends JpaRepository<YHB,Integer>{
    //根據部門查找用戶
    @Transactional
    @Query(value = "select new com.nju.software.assessment.model.YhbModel(y.yhbh,y.yhmc) from YHB y where yhbm=?1")
     List<YhbModel> findYhmcByYhbm(String yhbm);
}

@Query中的JPQL意思是根據用戶部門編號yhbm查詢用戶的實體類YHB中的用戶編號yhbh和用戶名稱yhmc,并把查詢出的結果封裝成一個YhbModel對象,List<YhbModel>中類型也是YhbModel類型的,之后的service層和controller層調用的時候返回類型也是List<YhbModel>。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“SpringBoot如何使用JPA實現查詢部分字段”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜君县| 平顶山市| 炉霍县| 武清区| 娱乐| 福贡县| 裕民县| 渭源县| 家居| 卓尼县| 柘城县| 安泽县| 湾仔区| 遂溪县| 太原市| 望城县| 西藏| 讷河市| 鄄城县| 沧源| 宝山区| 登封市| 景德镇市| 潢川县| 寿光市| 巍山| 墨玉县| 横山县| 三原县| 崇阳县| 高青县| 阿拉尔市| 江北区| 瑞昌市| 香河县| 丹凤县| 通城县| 镇沅| 桓台县| 若羌县| 锦州市|