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

SpringDataJpa如何使用union多表分頁條件查詢

 更新時(shí)間:2022年02月23日 15:06:51   作者:Hyz..  
這篇文章主要介紹了SpringDataJpa如何使用union多表分頁條件查詢,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

如何使用union多表分頁條件查詢

當(dāng)前項(xiàng)目有一個(gè)全局搜索的功能,需要涉及到7-8張主表,由于當(dāng)前項(xiàng)目使用的是Jpa,所以我決定使用原生sql的方式使用union來進(jìn)行查詢,由于對(duì)這個(gè)框架的不熟悉,被坑了很久,特此記錄。

條件

1、在參數(shù)列表中,使用@Param注解(例:@Param(“userId”) Long userId)

2、在sql中應(yīng)該以 :userId 的方式來注入?yún)?shù)(例:person.user_id = :userId),或者用?1 ?2根據(jù)參數(shù)的順序來注入也可以,我采用的是第一種

3、sql應(yīng)該是寫在@Query的value中,并且設(shè)置 nativeQuery = true

4、如果要設(shè)置一個(gè)可能為空的值,比如:有一個(gè)分類,需要當(dāng)作條件查詢,但是這個(gè)值是可能為空的,所以需要在sql中判斷,如果為空就不進(jìn)行篩選。語法其實(shí)和在sql中判斷是一樣的

where IF(:category is not null,a.category = :category is not null,1=1)

分頁

1、分頁必須加countQuery這個(gè)參數(shù),把上面sql價(jià)格count就可以

2、傳入Pageable,不要傳sort,不然會(huì)報(bào)錯(cuò),暫時(shí)沒找到解決方案

例如 select * from a 為你的sql

那么分頁應(yīng)該是

select * from (select * from a) b order by ?#{#pageable}

order by在countQuery里面就不用加了哦

3、返回的是Page<Object[]>,里面content封裝的順序就是你sql查出來的順序

踩過的坑

1、多表union查詢,查詢的字段應(yīng)該是一樣的,比如第一張user表查詢id,name,sex、第二張address表也必須查詢id,name,sex,如果沒有這個(gè)字段則自己封裝返回固定的值,可以為空字符串

2、傳入pageable的時(shí)候 ?#{#pageable} 必須這樣寫

分享幾個(gè)用到的mysql語法

1、判斷是否為空,不為空查詢時(shí)間在傳入時(shí)間之間的數(shù)據(jù)

IF(:startTime is not null and :endTime is not null,proc.create_time between :startTime and :endTime,1=1)

這邊我在service是判斷了結(jié)束時(shí)間是否為空的,如果結(jié)束時(shí)間為空,開始時(shí)間不為空默認(rèn)查詢一年的數(shù)據(jù)

2、根據(jù)名稱模糊查詢

proc.content LIKE CONCAT('%',:content,'%')

3、最后根據(jù)查出來的總數(shù)據(jù)對(duì)類型篩選

IF(:category is not null,a.category = :category is not null,1=1)

小結(jié)一下:

1、其實(shí)很簡單的分頁條件查詢,因?yàn)椴皇煜pa的語法,導(dǎo)致浪費(fèi)了很多時(shí)間,希望可以幫到更多的人。

2、暫時(shí)不知道怎么排序,無論是在pageable中傳入sort,還是在sql最后進(jìn)行排序都會(huì)報(bào)錯(cuò),如果有大佬知道的話可以點(diǎn)撥一下。

jpa執(zhí)行原生sql union bug解決

@Query(value = "SELECT * FROM count_entity where id=-1111 union (SELECT * FROM count_entity where video_name = ?1 AND platform ='騰訊視頻' ORDER BY click_date DESC LIMIT ?2)"
?+ "UNION"
?+ "(SELECT * FROM count_entity where video_name = ?1 AND platform ='愛奇藝' ORDER BY click_date DESC LIMIT ?2)"
?+ "UNION"
?+ "(SELECT * FROM count_entity where video_name = ?1 AND platform ='芒果TV' ORDER BY click_date DESC LIMIT ?2)", nativeQuery = true)

union前面需要連接一個(gè)空數(shù)據(jù)查詢,因?yàn)閡nion 第一個(gè)查詢不能用()

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

相關(guān)文章

  • 解決spring-data-jpa 事物中修改屬性自動(dòng)更新update問題

    解決spring-data-jpa 事物中修改屬性自動(dòng)更新update問題

    這篇文章主要介紹了解決spring-data-jpa 事物中修改屬性自動(dòng)更新update問題,具有很好的參考價(jià)值,希望對(duì)大家
    2021-08-08
  • 詳解Java如何利用位操作符創(chuàng)建位掩碼

    詳解Java如何利用位操作符創(chuàng)建位掩碼

    在本文中,我們來看看如何使用位操作符實(shí)現(xiàn)低級(jí)別的位掩碼。我們將看到我們?nèi)绾螌⒁粋€(gè)單一的int變量作為一個(gè)單獨(dú)的數(shù)據(jù)容器,感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2022-10-10
  • JPA?通過Specification如何實(shí)現(xiàn)復(fù)雜查詢

    JPA?通過Specification如何實(shí)現(xiàn)復(fù)雜查詢

    這篇文章主要介紹了JPA?通過Specification如何實(shí)現(xiàn)復(fù)雜查詢,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java?process.waitfor返回1的原因及解決

    java?process.waitfor返回1的原因及解決

    這篇文章主要介紹了java?process.waitfor返回1的原因及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 在MyBatis中實(shí)現(xiàn)一對(duì)多查詢和多對(duì)一查詢的方式詳解(各兩種方式)

    在MyBatis中實(shí)現(xiàn)一對(duì)多查詢和多對(duì)一查詢的方式詳解(各兩種方式)

    今天通過兩種方法分別給大家介紹在MyBatis中實(shí)現(xiàn)一對(duì)多查詢和多對(duì)一查詢的方式,每種方式通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-01-01
  • Springboot中如何自定義監(jiān)聽器

    Springboot中如何自定義監(jiān)聽器

    這篇文章主要介紹了Springboot中自定義監(jiān)聽器,自定義事件需要繼承ApplicationEvent類,并添加一個(gè)構(gòu)造函數(shù),用于接收事件源對(duì)象,本文通過示例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2024-07-07
  • JavaWeb文件上傳開發(fā)實(shí)例

    JavaWeb文件上傳開發(fā)實(shí)例

    這篇文章主要為大家詳細(xì)介紹了JavaWeb文件上傳開發(fā)實(shí)例,如何進(jìn)行文件上傳操作,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Java中的@PostConstruct注解的使用

    Java中的@PostConstruct注解的使用

    本文主要介紹了Java中的@PostConstruct注解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Mac OS X 下 IntelliJ IDEA、jEdit 等 Java 程序中文標(biāo)點(diǎn)輸入無效的完美解決方法

    Mac OS X 下 IntelliJ IDEA、jEdit 等 Java 程序中文標(biāo)點(diǎn)輸入無效的完美解決方法

    Mac OS X 下基于 Java 的程序會(huì)出現(xiàn)中文標(biāo)點(diǎn)輸入無效的問題,在中文輸入法狀態(tài),可以輸入中文字,但輸入中文標(biāo)點(diǎn)最后上去的是英文標(biāo)點(diǎn).這篇文章主要介紹了Mac OS X 下 IntelliJ IDEA、jEdit 等 Java 程序中文標(biāo)點(diǎn)輸入無效的完美解決方法,需要的朋友可以參考下
    2016-10-10
  • java實(shí)現(xiàn)單機(jī)限流

    java實(shí)現(xiàn)單機(jī)限流

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)單機(jī)限流,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評(píng)論