最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

SpringBoot JPA查詢部分字段

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

自定義簡(jiǎn)單的查詢方法

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

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

關(guān)鍵詞 舉例 對(duì)應(yīng)的sql語(yǔ)句
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)

這種方式很簡(jiǎn)單,但也有很多缺陷,不夠靈活,不用擔(dān)心,Spring data jpa還支持自定義查詢語(yǔ)句。

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

使用JPA命名規(guī)范寫的函數(shù)能夠查詢出整個(gè)對(duì)象,而不能只查詢出一個(gè)或幾個(gè)字段,因?yàn)橛袝r(shí)候我們只需要一個(gè)bean中的幾個(gè)字段就夠了,不需要全部的。

例如用戶表,根據(jù)id查姓名,就不需要把密碼等重要信息查出來(lái)了,因?yàn)檫@些信息封裝在一個(gè)對(duì)象中返回到前端是很危險(xiǎn)的,即使沒(méi)有顯示,但也可以在瀏覽器上調(diào)試看到。

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

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

例如有一個(gè)用戶表,如下:

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

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

YhbModel.java

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

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

@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ù)用戶部門編號(hào)yhbm查詢用戶的實(shí)體類YHB中的用戶編號(hào)yhbh和用戶名稱yhmc,并把查詢出的結(jié)果封裝成一個(gè)YhbModel對(duì)象,List<YhbModel>中類型也是YhbModel類型的,之后的service層和controller層調(diào)用的時(shí)候返回類型也是List<YhbModel>。

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

相關(guān)文章

  • 解決JAVA項(xiàng)目啟動(dòng)卡住,無(wú)任何異常信息的問(wèn)題

    解決JAVA項(xiàng)目啟動(dòng)卡住,無(wú)任何異常信息的問(wèn)題

    這篇文章主要介紹了解決JAVA項(xiàng)目啟動(dòng)卡住,無(wú)任何異常信息的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • JAVA實(shí)現(xiàn)LRU算法的參考示例

    JAVA實(shí)現(xiàn)LRU算法的參考示例

    這篇文章主要介紹了JAVA實(shí)現(xiàn)LRU算法的參考示例,幫助大家根據(jù)需求實(shí)現(xiàn)算法,感興趣的朋友可以了解下
    2020-10-10
  • springboot集成websocket的四種方式小結(jié)

    springboot集成websocket的四種方式小結(jié)

    本文主要介紹了springboot集成websocket的四種方式小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 解決SpringBoot加載application.properties配置文件的坑

    解決SpringBoot加載application.properties配置文件的坑

    這篇文章主要介紹了SpringBoot加載application.properties配置文件的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java中堆內(nèi)存與棧內(nèi)存的知識(shí)點(diǎn)總結(jié)

    java中堆內(nèi)存與棧內(nèi)存的知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于java中堆內(nèi)存與棧內(nèi)存的知識(shí)點(diǎn)總結(jié),有需要的朋友們可以跟著學(xué)習(xí)下。
    2019-12-12
  • Redisson可重入鎖解鎖邏輯詳細(xì)講解

    Redisson可重入鎖解鎖邏輯詳細(xì)講解

    Redisson開源框架是一個(gè)Redis的分布式鎖的現(xiàn)成實(shí)現(xiàn)方案,是Redis的java實(shí)現(xiàn)的客戶端。通過(guò)Netty支持非阻塞I/O。Redisson實(shí)現(xiàn)了分布式鎖的自動(dòng)續(xù)期機(jī)制、鎖的互斥自等待機(jī)制、鎖的可重入加鎖與釋放鎖的機(jī)制
    2023-02-02
  • springboot之security?FilterSecurityInterceptor的使用要點(diǎn)記錄

    springboot之security?FilterSecurityInterceptor的使用要點(diǎn)記錄

    這篇文章主要介紹了springboot之security?FilterSecurityInterceptor的使用要點(diǎn)記錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • JavaWeb中Servlet的生命周期及線程安全問(wèn)題詳解

    JavaWeb中Servlet的生命周期及線程安全問(wèn)題詳解

    這篇文章主要介紹了JavaWeb中Servlet的生命周期及線程安全問(wèn)題詳解,Servlet?生命周期可被定義為從創(chuàng)建直到毀滅的整個(gè)過(guò)程,Servlet體系結(jié)構(gòu)是建立在Java多線程機(jī)制之上的,它的生命周期是由Web容器負(fù)責(zé)的,需要的朋友可以參考下
    2024-01-01
  • 淺談MyBatis-Plus學(xué)習(xí)之Oracle的主鍵Sequence設(shè)置的方法

    淺談MyBatis-Plus學(xué)習(xí)之Oracle的主鍵Sequence設(shè)置的方法

    這篇文章主要介紹了淺談MyBatis-Plus學(xué)習(xí)之Oracle的主鍵Sequence設(shè)置的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • ReadWriteLock接口及其實(shí)現(xiàn)ReentrantReadWriteLock方法

    ReadWriteLock接口及其實(shí)現(xiàn)ReentrantReadWriteLock方法

    下面小編就為大家?guī)?lái)一篇ReadWriteLock接口及其實(shí)現(xiàn)ReentrantReadWriteLock方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06

最新評(píng)論

卫辉市| 长汀县| 麻城市| 宁陵县| 临泉县| 镇江市| 田阳县| 酉阳| 平江县| 绥滨县| 时尚| 鄂伦春自治旗| 衡阳市| 略阳县| 柳州市| 英吉沙县| 兴山县| 宽甸| 闸北区| 河北区| 襄城县| 达日县| 武义县| 大荔县| 镇康县| 泸州市| 南京市| 宜州市| 黔东| 阳城县| 华坪县| 石嘴山市| 东阳市| 渑池县| 靖远县| 武汉市| 东乡| 九台市| 迁安市| 巩义市| 乌拉特中旗|