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

Jpa中Specification的求和sum不生效原理分析

 更新時(shí)間:2023年08月17日 11:40:40   作者:虛驚一百場(chǎng)  
這篇文章主要為大家介紹了Jpa中Specification的求和sum不生效原理示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

秋天的北京一如既往的沒太陽(yáng),分不清天上是云是霧或者又是什么奇奇怪怪的東西,建筑物不分黑白的證明著自己的輪廓。霧蒙蒙的天一眼望不到邊,就像我需要用到Spring Data Jpa 實(shí)現(xiàn)一個(gè)特別小的SQL,怎么寫都看不到我想要的效果一樣。

簡(jiǎn)單的統(tǒng)計(jì)

想實(shí)現(xiàn)的SQL十分簡(jiǎn)單,就是一個(gè)簡(jiǎn)單的統(tǒng)計(jì):

SELECT
    activity_code,
    activity_name,
    sum(contact_user_nums),
    conversion_step_code,
    conversion_step
FROM
    epm_estimate_main
WHERE
    activity_code ='1'
GROUP BY
    conversion_step_code
ORDER BY
    contact_user_nums DESC;

jpa實(shí)現(xiàn)方式

由于一些條條框框的原因,最終選擇用jpa的這種實(shí)現(xiàn)方式,想到這個(gè)玩意五分鐘寫完就能回家玩游戲,于是上來就寫:

但是查詢出來的結(jié)果卻不是很好看:第一,我沒有拿到想要的求和;第二,查詢出來的結(jié)果集包括所有字段;
好在分組和排序都按照預(yù)期的想法實(shí)現(xiàn)了。

方法

首先去B某搜索引擎上找,找來找去,大家的方法無非四種:

  • 第一種:去XXX的JPA, MyBatis真香;
  • 第二種:實(shí)在不行用JPQL;
  • 第三種:自己創(chuàng)建CriteriaBuilder,CriteriaQuery及Root;
  • 第四種:不知道怎么寫,等大腿。

國(guó)內(nèi)搜完,于是又去G某引擎上翻翻,老外似乎問的比較具體,但都沒找到我想要的答案(散裝的四級(jí)還是吃力);

翻看了一些網(wǎng)上的問題與解答,貌似出現(xiàn)了一個(gè)規(guī)律,用findAll方法實(shí)現(xiàn)Specification接口的文章似乎都有這個(gè)問題,而使用EntityManager自己來實(shí)現(xiàn)的小伙伴都不怎么關(guān)注。

findAll實(shí)現(xiàn)

赤裸裸的歧視,下定決心就要用這個(gè)findAll實(shí)現(xiàn)一把。

窗外的天色越來越暗,但是我覺得這么簡(jiǎn)單的一個(gè)查詢居然浪費(fèi)了我開黑的時(shí)間,不由得開始懷疑自己。不管我怎么對(duì)CriteriaQuery.multiselect操作,查詢出來得結(jié)果集都是包含所有字段,不由得開始懷疑multiselect這個(gè)方法為什么沒有生效,JpaSpecificationExecutor這個(gè)接口到底什么居心?

找到這個(gè)接口的API:有兩個(gè)實(shí)現(xiàn)類(其中QuerydslJpaRepository已顯示過期)

剩下的這個(gè)實(shí)現(xiàn)類SimpleJpaRepository中找到對(duì)應(yīng)的findAll方法,它調(diào)用了本類中的其他方法,一路向下找,最終在方法調(diào)用的末端,找到了其中的貓膩:

我在multiselect方法中的所有定義都被 query.select(root) 覆蓋掉了!

天色已晚,華燈初上,最后本來想重寫一下這個(gè)方法,但撇了一眼樓下的公交站,廣告牌的背景似乎有點(diǎn)過年的味道。

Spring Boot自動(dòng)注冊(cè)了EntityManager

那段代碼最終變成這樣(Spring Boot自動(dòng)注冊(cè)了EntityManager):

CriteriaBuilder builder = entityManager.getCriteriaBuilder();
        CriteriaQuery<EstimateDO> query = builder.createQuery(EstimateDO.class);
        Root<EstimateDO> root = query.from(EstimateDO.class);
        query
                .multiselect(
                        root.get("activityCode"),
                        root.get("activityName"),
                        builder.sum(root.get("contactUserNums").as(Long.class)).alias("contactUserNums"),
                        root.get("conversionStepCode"),
                        root.get("conversionStep")
                );
        List<Predicate> predicates = new ArrayList();
        predicates.add(
                builder.equal(root.get("activityCode").as(String.class), estimateDO.getActivityCode())
        );
        if (!StringUtils.isEmpty(estimateDO.getContactCode())) {
            predicates.add(
                    builder.equal(root.get("contactCode").as(String.class), estimateDO.getContactCode())
            );
        }
        query
                .where(predicates.toArray(new Predicate[predicates.size()]))
                .groupBy(root.get("conversionStepCode"))
                .orderBy(builder.desc(root.get("contactUserNums")));
        List<EstimateDO> list = entityManager.createQuery(query).getResultList();

我的決心一文不值。

以上就是Jpa中Specification的求和sum不生效原理分析的詳細(xì)內(nèi)容,更多關(guān)于Jpa Specification sum不生效的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java Mybatis框架Dao層的實(shí)現(xiàn)與映射文件以及核心配置文件詳解分析

    Java Mybatis框架Dao層的實(shí)現(xiàn)與映射文件以及核心配置文件詳解分析

    MyBatis 是一款優(yōu)秀的持久層框架,它支持自定義 SQL、存儲(chǔ)過程以及高級(jí)映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設(shè)置參數(shù)和獲取結(jié)果集的工作。MyBatis 可以通過簡(jiǎn)單的 XML 或注解來配置和映射原始類型、接口和 Java POJO為數(shù)據(jù)庫(kù)中的記錄
    2021-10-10
  • java操作ftp下載文件示例

    java操作ftp下載文件示例

    這篇文章主要介紹了java操作ftp下載文件的示例,需要的朋友可以參考下
    2014-02-02
  • Java基數(shù)排序radix sort原理及用法解析

    Java基數(shù)排序radix sort原理及用法解析

    這篇文章主要介紹了Java基數(shù)排序radix sort原理及用法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • springboot log多環(huán)境配置方式

    springboot log多環(huán)境配置方式

    這篇文章主要介紹了springboot log多環(huán)境配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Intellij IDEA下Spring Boot熱切換配置

    Intellij IDEA下Spring Boot熱切換配置

    這篇文章主要介紹了Intellij IDEA下Spring Boot熱切換配置,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • LambdaQueryWrapper與QueryWrapper的使用方式

    LambdaQueryWrapper與QueryWrapper的使用方式

    這篇文章主要介紹了LambdaQueryWrapper與QueryWrapper的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 基于SpringBoot整合SSMP的詳細(xì)教程

    基于SpringBoot整合SSMP的詳細(xì)教程

    這篇文章主要介紹了SpringBoot整合SSMP的詳細(xì)教程,通過本文學(xué)習(xí)基于SpringBoot實(shí)現(xiàn)SSMP整合的詳細(xì)代碼,需要的朋友可以參考下
    2022-08-08
  • 若依 MyBatis改為MyBatis-Plus的實(shí)現(xiàn)步驟

    若依 MyBatis改為MyBatis-Plus的實(shí)現(xiàn)步驟

    本文主要介紹了若依 MyBatis改為MyBatis-Plus的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • java靜態(tài)代理的含義及用法

    java靜態(tài)代理的含義及用法

    在本篇文章里小編給大家整理的是一篇關(guān)于java靜態(tài)代理的含義及用法,有需要的朋友們可以跟著學(xué)習(xí)參考下。
    2021-06-06
  • RabbitMQ 如何解決消息冪等性的問題

    RabbitMQ 如何解決消息冪等性的問題

    這篇文章主要介紹了RabbitMQ 如何解決消息冪等性的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論