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

SpringBoot之QueryDsl嵌套子查詢問題

 更新時(shí)間:2023年03月15日 10:48:47   作者:平靜的起步吧  
這篇文章主要介紹了SpringBoot之QueryDsl嵌套子查詢問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

QueryDsl嵌套子查詢

我項(xiàng)目中要求所有的SQL必須以JPA的QueryDsl格式進(jìn)行數(shù)據(jù)庫(kù)操作,其中有一個(gè)稍微復(fù)雜點(diǎn)的嵌套子查詢,網(wǎng)上資料比較少,而且子查詢也特別簡(jiǎn)單。

費(fèi)了好大的勁才搞出來(lái),現(xiàn)貼出來(lái)供大家參考。

這是MyBatis的查詢格式

select dd.crm_province as 省編碼,
         dd.province_name as 省份,
         nvl(dd.anncount, 0) as 年化收入,
         nvl(dd.yicansai, 0) as 已參賽人數(shù),
         nvl(ss.weicansai, 0) as 未參賽人數(shù),
         rank() over(order by nvl(dd.anncount, 0) desc)  as 排名
    from (select ll.crm_province,
                 ll.province_name,
                 nvl(sum(ll.annuali_count), 0) anncount,
                 count(distinct ll.staff_id) yicansai
            from tm_match_report_user ll
           where ll.is_close = 1
             and ll.role_id = 00
             and ll.is_login = 1
           group by ll.crm_province, ll.province_name) dd
    left join (select ll.crm_province, count(distinct ll.staff_id) weicansai
                 from tm_match_report_user ll
                where ll.is_close = 1
                  and ll.role_id = 00
                  and ll.is_login = 0
                group by ll.crm_province) ss
      on dd.crm_province = ss.crm_province
   order by dd.anncount desc

這是JPA的QueryDsl格式

 /**
   * 復(fù)雜sql查詢 -- 雙子查詢Join
   * @return
   */
  public List<StaffRank> topBind() {
    QMatchReportUser user = new QMatchReportUser("tm_match_report_user");
    QMatchReportUser user1 = new QMatchReportUser("tm_match_report_user");
 
    StringPath dd = Expressions.stringPath("dd");
    StringPath ss = Expressions.stringPath("ss");
 
    SimpleTemplate<String> crm_Province = Expressions.template(String.class, "dd.crm_Province");
 
    SimpleTemplate<String> sscrm_Province = Expressions.template(String.class, "ss.crm_Province");
    SimpleTemplate<String> province_Name = Expressions.template(String.class, "dd.province_Name");
    NumberTemplate<Long> anncount = Expressions.numberTemplate(Long.class, "nvl(dd.anncount, 0)");
    NumberTemplate<Long> yicansai = Expressions.numberTemplate(Long.class, "nvl(dd.yicansai, 0)");
    NumberTemplate<Long> weicansai = Expressions.numberTemplate(Long.class, "nvl(ss.weicansai, 0)");
    NumberTemplate<Integer> template = Expressions
        .numberTemplate(Integer.class, "rank() over(order by nvl(dd.anncount, 0) desc)");
 
    OrderSpecifier order = new OrderSpecifier(Order.DESC,
        Expressions.template(String.class, "dd.anncount"));
 
    SubQueryExpression query = SQLExpressions
        .select(user.crm_Province, user.province_Name,
            user.annuali_Count.sum().as("anncount"),
            user.staff_Id.countDistinct().as("yicansai"))
        .from(user)
        .where(user.is_CLOSE.eq(1), user.role_Id.eq("00"), user.is_Login.eq("1"))
        .groupBy(user.crm_Province, user.province_Name);
 
    SubQueryExpression query1 = SQLExpressions
        .select(user1.crm_Province, user1.staff_Id.countDistinct().as("weicansai"))
        .from(user1)
        .where(user1.is_CLOSE.eq(1), user1.role_Id.eq("00"), user1.is_Login.eq("0"))
        .groupBy(user1.crm_Province);
 
    return factory.select(
        Projections.bean(StaffRank.class,
            crm_Province.as("crm_Province"),
            province_Name.as("province_Name"), anncount.as("anncount"),
            yicansai.as("yicansai"), weicansai.as("weicansai"), template.as("rank")))
        .from(query, dd).leftJoin(query1, ss).on(crm_Province.eq(sscrm_Province)).orderBy(order)
        .fetch();
  }
QMatchReportUser user = new QMatchReportUser("tm_match_report_user");

這個(gè)應(yīng)該不用解釋了,QueryDsl會(huì)自動(dòng)生成大寫Q的實(shí)體類,tm_match_report_user是表名。

有需要的童鞋可以參考下,基本上大同小異。

需要注意的是

 NumberTemplate<Integer> template = Expressions
                   .numberTemplate(Integer.class,
                   "rank() over(order by nvl(dd.anncount, 0) desc)");

還可以通過占位符的樣式來(lái)寫

NumberTemplate<Integer> template = Expressions
                    .numberTemplate(Integer.class, 
                    "rank() over(order by nvl(sum({0}), 0) desc)",quser.opening_Count);

總結(jié)

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

相關(guān)文章

  • 解讀JVM的生命周期是怎么樣的

    解讀JVM的生命周期是怎么樣的

    JVM的生命周期包括啟動(dòng)、運(yùn)行和終止三個(gè)階段,啟動(dòng)階段包括創(chuàng)建JVM實(shí)例、加載和初始化核心類庫(kù)、加載main方法所在的類和初始化類,運(yùn)行階段包括執(zhí)行main方法、類加載、字節(jié)碼執(zhí)行、內(nèi)存管理、線程管理和異常處理,終止階段包括正常終止、異常終止和外部終止
    2025-03-03
  • Java平閏年判斷的方法總結(jié)

    Java平閏年判斷的方法總結(jié)

    本篇文章給大家整理了Java平閏年判斷的兩種方法,大家在寫程序的時(shí)候如果用的到參考下吧。
    2018-02-02
  • java int轉(zhuǎn)byte和long轉(zhuǎn)byte的方法

    java int轉(zhuǎn)byte和long轉(zhuǎn)byte的方法

    下面小編就為大家?guī)?lái)一篇java int轉(zhuǎn)byte和long轉(zhuǎn)byte的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2016-10-10
  • springboot2.0 配置時(shí)間格式化不生效問題的解決

    springboot2.0 配置時(shí)間格式化不生效問題的解決

    這篇文章主要介紹了springboot2.0 配置時(shí)間格式化不生效問題的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java實(shí)現(xiàn)AOP功能的封裝與配置的小框架實(shí)例代碼

    Java實(shí)現(xiàn)AOP功能的封裝與配置的小框架實(shí)例代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)AOP功能的封裝與配置的小框架實(shí)例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Idea配置Maven阿里云鏡像加速的實(shí)現(xiàn)

    Idea配置Maven阿里云鏡像加速的實(shí)現(xiàn)

    這篇文章主要介紹了Idea配置Maven阿里云鏡像加速的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Minio?上傳文件請(qǐng)求負(fù)載原理解析

    Minio?上傳文件請(qǐng)求負(fù)載原理解析

    MinIO集群通過分布式存儲(chǔ)和負(fù)載均衡機(jī)制實(shí)現(xiàn)文件上傳請(qǐng)求的分發(fā),核心原理包括數(shù)據(jù)分片和冗余、負(fù)載均衡、一致性哈希和并行處理,Java示例展示了如何實(shí)現(xiàn)文件上傳分發(fā)邏輯,感興趣的朋友一起看看吧
    2025-03-03
  • Java判斷List中相同值元素的個(gè)數(shù)實(shí)例

    Java判斷List中相同值元素的個(gè)數(shù)實(shí)例

    今天小編就為大家分享一篇Java判斷List中相同值元素的個(gè)數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-07-07
  • springsecurity基于token的認(rèn)證方式

    springsecurity基于token的認(rèn)證方式

    本文主要介紹了springsecurity基于token的認(rèn)證方式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java之Springcloud Feign組件詳解

    Java之Springcloud Feign組件詳解

    這篇文章主要介紹了Java之Springcloud Feign組件詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08

最新評(píng)論

肇庆市| 苍南县| 兴安盟| 新干县| 南昌市| 体育| 西昌市| 芒康县| 名山县| 海门市| 江华| 民丰县| 贺州市| 同江市| 色达县| 中西区| 乐都县| 台前县| 乌什县| 满洲里市| 渭源县| 武穴市| 土默特左旗| 大名县| 即墨市| 广水市| 辽阳县| 盐边县| 广安市| 紫金县| 横山县| 贵州省| 镇坪县| 绥江县| 米易县| 内黄县| 龙川县| 北宁市| 大兴区| 巴彦淖尔市| 长兴县|