91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

SpringBoot之QueryDsl嵌套子查詢問題怎么解決

發布時間:2023-03-15 11:23:52 來源:億速云 閱讀:139 作者:iii 欄目:開發技術

今天小編給大家分享一下SpringBoot之QueryDsl嵌套子查詢問題怎么解決的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    QueryDsl嵌套子查詢

    我項目中要求所有的SQL必須以JPA的QueryDsl格式進行數據庫操作,其中有一個稍微復雜點的嵌套子查詢,網上資料比較少,而且子查詢也特別簡單。

    這是MyBatis的查詢格式

    select dd.crm_province as 省編碼,
             dd.province_name as 省份,
             nvl(dd.anncount, 0) as 年化收入,
             nvl(dd.yicansai, 0) as 已參賽人數,
             nvl(ss.weicansai, 0) as 未參賽人數,
             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格式

     /**
       * 復雜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");

    這個應該不用解釋了,QueryDsl會自動生成大寫Q的實體類,tm_match_report_user是表名。

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

    需要注意的是

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

    還可以通過占位符的樣式來寫

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

    以上就是“SpringBoot之QueryDsl嵌套子查詢問題怎么解決”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

    向AI問一下細節

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

    AI

    巴青县| 凤阳县| 铅山县| 轮台县| 滦平县| 会东县| 固始县| 陵水| 南昌市| 贵定县| 若羌县| 平山县| 丹阳市| 汉川市| 德化县| 横峰县| 绥芬河市| 休宁县| 磴口县| 平遥县| 阿鲁科尔沁旗| 肥乡县| 哈尔滨市| 庐江县| 健康| 蒙山县| 梅河口市| 咸阳市| 绥化市| 北安市| 仪陇县| 裕民县| 南宁市| 家居| 汝南县| 甘南县| 洛宁县| 沙雅县| 鄂托克旗| 榆社县| 扎赉特旗|