欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot使用JPA實現(xiàn)查詢部分字段

 更新時間:2021年08月27日 10:40:58   作者:靜幽水1  
這篇文章主要介紹了SpringBoot使用JPA實現(xiàn)查詢部分字段方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

SpringBoot JPA查詢部分字段

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

自定義簡單的查詢方法

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

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

關(guān)鍵詞 舉例 對應的sql語句
And findByLastnameAndFirstname … where x.lastname = ?1 and x.firstname = ?2
Or findByLastnameOrFirstname … where x.lastname = ?1 or x.firstname = ?2
Is,Equals findByFirstnameIs,findByFirstnameEquals … where x.firstname = ?1
Between findByStartDateBetween … where x.startDate between ?1 and ?2
LessThan findByAgeLessThan … where x.age < ?1
LessThanEqual findByAgeLessThanEqual … where x.age ⇐ ?1
GreaterThan findByAgeGreaterThan … where x.age > ?1
GreaterThanEqual findByAgeGreaterThanEqual … where x.age >= ?1
After findByStartDateAfter … where x.startDate > ?1
Before findByStartDateBefore … where x.startDate < ?1
IsNull findByAgeIsNull … where x.age is null
IsNotNull,NotNull findByAge(Is)NotNull … where x.age not null
Like findByFirstnameLike … where x.firstname like ?1
NotLike findByFirstnameNotLike … where x.firstname not like ?1
StartingWith findByFirstnameStartingWith … where x.firstname like ?1 (parameter bound with appended %)
EndingWith findByFirstnameEndingWith … where x.firstname like ?1 (parameter bound with prepended %)
Containing findByFirstnameContaining … where x.firstname like ?1 (parameter bound wrapped in %)
OrderBy findByAgeOrderByLastnameDesc … where x.age = ?1 order by x.lastname desc
Not findByLastnameNot … where x.lastname <> ?1
In findByAgeIn(Collection ages) … where x.age in ?1
NotIn findByAgeNotIn(Collection age) … where x.age not in ?1
TRUE findByActiveTrue() … where x.active = true
FALSE findByActiveFalse() … where x.active = false
IgnoreCase findByFirstnameIgnoreCase … where UPPER(x.firstame) = UPPER(?1)

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

  • 使用 @Query注解,添加JPQL語句,JPQL是一種面向?qū)ο蟮谋磉_式語言,通過類名和屬性訪問,而不是數(shù)據(jù)庫中的表名和屬性,避免了不同數(shù)據(jù)庫語法的不同。
  • 在@Query中添加nativeQuery = true表示使用原生的sql語句,這時候就有要使用數(shù)據(jù)庫表名和字段名了。
  • 當涉及到刪除和修改在需要加上@Modifying.也可以根據(jù)需要添加 @Transactional對事物的支持,查詢超時的設置等。

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

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

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

那么自定義的JPQL就可以實現(xiàn)這個功能了。

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

@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;
//省略構(gòu)造函數(shù)和get set

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

YhbModel.java

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

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

@Repository
public interface YhbDao extends JpaRepository<YHB,Integer>{
    //根據(jù)部門查找用戶
    @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意思是根據(jù)用戶部門編號yhbm查詢用戶的實體類YHB中的用戶編號yhbh和用戶名稱yhmc,并把查詢出的結(jié)果封裝成一個YhbModel對象,List<YhbModel>中類型也是YhbModel類型的,之后的service層和controller層調(diào)用的時候返回類型也是List<YhbModel>。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java基礎知識精通循環(huán)結(jié)構(gòu)與break及continue

    Java基礎知識精通循環(huán)結(jié)構(gòu)與break及continue

    循環(huán)結(jié)構(gòu)是指在程序中需要反復執(zhí)行某個功能而設置的一種程序結(jié)構(gòu)。它由循環(huán)體中的條件,判斷繼續(xù)執(zhí)行某個功能還是退出循環(huán),選擇結(jié)構(gòu)用于判斷給定的條件,根據(jù)判斷的結(jié)果判斷某些條件,根據(jù)判斷的結(jié)果來控制程序的流程
    2022-04-04
  • SpringBoot集成cache緩存的實現(xiàn)

    SpringBoot集成cache緩存的實現(xiàn)

    日常開發(fā)中,緩存是解決數(shù)據(jù)庫壓力的一種方案,本文記錄springboot中使用cache緩存。需要的朋友們下面隨著小編來一起學習學習吧
    2021-06-06
  • Spring多數(shù)據(jù)源導致配置失效的解決

    Spring多數(shù)據(jù)源導致配置失效的解決

    這篇文章主要介紹了Spring多數(shù)據(jù)源導致配置失效的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • java學習之jar包的下載和導入

    java學習之jar包的下載和導入

    我們經(jīng)常碰到有些jar包在中央倉庫沒有的情況,這時候我們需要導入,這篇文章主要給大家介紹了關(guān)于java學習之jar包的下載和導入的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • java用重定向方法從文件中讀入或?qū)懭霐?shù)據(jù)

    java用重定向方法從文件中讀入或?qū)懭霐?shù)據(jù)

    這篇文章主要為大家詳細介紹了用重定向方法從文件中讀入或?qū)懭霐?shù)據(jù),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Spring與Mybatis的整合方法有哪些

    Spring與Mybatis的整合方法有哪些

    本文主要給大家介紹Spring與Mybatis的三種常用整合方法,需要用到的整合框架包mybatis-spring.jar,對spring mybatis整合感興趣的朋友可以參考下本文
    2015-10-10
  • javaWeb使用驗證碼實現(xiàn)簡單登錄

    javaWeb使用驗證碼實現(xiàn)簡單登錄

    這篇文章主要為大家詳細介紹了javaWeb使用驗證碼實現(xiàn)簡單登錄,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 淺談SpringMVC中的session用法及細節(jié)記錄

    淺談SpringMVC中的session用法及細節(jié)記錄

    下面小編就為大家?guī)硪黄獪\談SpringMVC中的session用法及細節(jié)記錄。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • SpringSecurity在SpringBoot中的自動裝配過程

    SpringSecurity在SpringBoot中的自動裝配過程

    這篇文章主要介紹了SpringSecurity在SpringBoot中的自動裝配過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java實現(xiàn)圖片拼接

    Java實現(xiàn)圖片拼接

    這篇文章主要為大家詳細介紹了Java實現(xiàn)圖片拼接的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08

最新評論