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

Springboot?jpa使用sum()函數(shù)返回結(jié)果如何被接收

 更新時(shí)間:2022年02月23日 14:24:29   作者:ununie  
這篇文章主要介紹了Springboot?jpa使用sum()函數(shù)返回結(jié)果如何接收,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

jpa使用sum()返回結(jié)果如何接收

1、需求

我的需求是統(tǒng)計(jì)域名以及域名出現(xiàn)的次數(shù)。

之前使用springboot jpa都是把數(shù)據(jù)庫(kù)中的表跟實(shí)體類綁定,創(chuàng)建繼承JpaRepository的接口。如下:

@Repository
public interface UrlsRepository extends JpaRepository<Urls, String> { 
    Optional<Urls> findById(Integer id);
}

但是對(duì)于這種查詢卻無(wú)法綁定到原有的實(shí)體類。那么改怎么解決這種需求呢?

2、解決方法一

使用Object[] 數(shù)組接收每一行數(shù)據(jù),用List<Object[]>接收查詢結(jié)果。

repository中的寫法

    @Query(value = "SELECT domain,sum(visit_count) from Urls GROUP BY domain ORDER BY sum(visit_count) desc", nativeQuery = true)
    List<Object[]> findDomainAndCount();

注意:@Query的nativeQuery屬性值默認(rèn)是false,表示使用JPQL語(yǔ)言。設(shè)為true表示使用本地sql(數(shù)據(jù)庫(kù)對(duì)應(yīng)的sql)

測(cè)試:

    @Test
    public void findDomainAndCount() {
        List<Object[]> list = urlsRepository.findDomainAndCount();
        for (Object[] objs : list) {
            for (int i = 0; i < objs.length; i++) {
                System.out.print(String.valueOf(objs[i]) + ",");
            }
            System.out.println();
        }
    }

結(jié)果:

3、解決方法二

用一個(gè)包裝類來(lái)接收查詢結(jié)果。

@Getter
@Setter
@ToString
public class DomainVo {
    private String domain;
    private Long visitCount; 
    public DomainVo(String domain, Long visitCount) {
        this.domain = domain;
        this.visitCount = visitCount;
    }
}

repository寫法

    /*
    注意:
    1、使用的是全類名
    2、查詢的表對(duì)應(yīng)的是已經(jīng)綁定的實(shí)體類Urls
    3、nativeQuery設(shè)為false,表示使用的是jpql語(yǔ)言。
     */ 
@Query(value = "SELECT new com.ununie.chromehistory.model.vo.DomainVo(u.domain,sum(u.visitCount)) from Urls u GROUP BY u.domain ORDER BY sum(u.visitCount) desc")
    List<DomainVo> findDomainCount();

測(cè)試:

    @Test
    public void findDomainCount() {
        List<DomainVo> domainCount = urlsRepository.findDomainCount();
        for (DomainVo vo : domainCount) {
            System.out.println(vo);
        }
    }

結(jié)果:

jpa使用count函數(shù)和sum函數(shù)

最近在使用JPQL時(shí)遇到了一個(gè)問(wèn)題,關(guān)于count函數(shù)和sum函數(shù)不知該如何取值,在網(wǎng)上查了查資料,找到了一種解決方法

具體代碼如下:

public long getObjectsCountByQueryString(String queryString) {
? ? ? ? //queryString = "select count(o) from MyModel as o";?
? ? ? ? long count = 0;?
? ? ? ? count = ((Long)getJpaTemplate().find(queryString).get(0)).longValue();
? ? ? ? return count;?
? ? } ?? ??
? ? public long getObjectsSumByQueryString(String queryString) {
? ? ? ? //queryString = "select sum(o.price) from MyModel as o";?
? ? ? ? List list = getJpaTemplate().find(queryString);
? ? ? ? //使用sum函數(shù)要注意這里要先判斷是否為null,不然會(huì)出空指針異常,count函數(shù)不用判斷null
? ? ? ? if(list.get(0) == null){
? ? ? ? ? ? return 0;
? ? ? ? }
? ? ? ? else{
? ? ? ? ? ? return ((Long)list.get(0)).longValue();
? ? ? ? }
? ? }

剛開始使用JPA時(shí),基本都依賴@query(SQL)注解通過(guò)原生sql來(lái)實(shí)現(xiàn)

根據(jù)編號(hào)統(tǒng)計(jì)條數(shù):

方法一

@Query(" select count(t) from FollowerInfo t where investUserId = :invUserId")
Integer findFollowerNumberByInvUserId(@Param("invUserId") Long invUserId);

這種原生的方式,跟直接寫SQL沒(méi)什么區(qū)別。雖然能實(shí)現(xiàn)功能,但是浪費(fèi)了JPA的簡(jiǎn)潔簡(jiǎn)化代碼的設(shè)計(jì)的優(yōu)點(diǎn)。

網(wǎng)上看到另外一個(gè)方法:

List findAll(Specification spec);

在repository層findAll,然后在service層封裝,獲取list.size()來(lái)處理總條數(shù)問(wèn)題。

這樣避免了寫SQL語(yǔ)句。

今天看了一下CrudRepository的源碼 發(fā)現(xiàn)該接口源碼里面有一個(gè)函數(shù):

方法二

/**
* Returns the number of entities available.
*
* @return the number of entities
*/
long count();

于是繼承了CrudRepository 寫了一個(gè)demo:

方法三

Long countByInvestUserId(Long investUserId);

一行代碼就全部搞定! 效果跟方法1一樣

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

相關(guān)文章

  • Java網(wǎng)絡(luò)編程教程之設(shè)置請(qǐng)求超時(shí)的方法

    Java網(wǎng)絡(luò)編程教程之設(shè)置請(qǐng)求超時(shí)的方法

    這篇文章主要給大家介紹了關(guān)于Java網(wǎng)絡(luò)編程教程之設(shè)置請(qǐng)求超時(shí)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Spring?循環(huán)依賴之AOP實(shí)現(xiàn)詳情

    Spring?循環(huán)依賴之AOP實(shí)現(xiàn)詳情

    這篇文章主要介紹了Spring?循環(huán)依賴之AOP實(shí)現(xiàn)詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的盆友可以參考一下
    2022-07-07
  • spring-boot項(xiàng)目啟動(dòng)遲緩異常排查解決記錄

    spring-boot項(xiàng)目啟動(dòng)遲緩異常排查解決記錄

    這篇文章主要為大家介紹了spring-boot項(xiàng)目啟動(dòng)遲緩異常排查解決記錄,突然在本地啟動(dòng)不起來(lái)了,表象特征就是在本地IDEA上運(yùn)行時(shí),進(jìn)程卡住也不退出,應(yīng)用啟動(dòng)時(shí)加載相關(guān)組件的日志也不輸出
    2022-02-02
  • 淺談Spring Boot Web 應(yīng)用性能優(yōu)化

    淺談Spring Boot Web 應(yīng)用性能優(yōu)化

    這篇文章主要介紹了淺談Spring Boot Web 應(yīng)用性能優(yōu)化,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Java實(shí)現(xiàn)動(dòng)態(tài)數(shù)字時(shí)鐘

    Java實(shí)現(xiàn)動(dòng)態(tài)數(shù)字時(shí)鐘

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)動(dòng)態(tài)數(shù)字時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • 利用java批量給pdf加水印的方法示例

    利用java批量給pdf加水印的方法示例

    這篇文章主要介紹了利用java批量給pdf加水印的方法,文中給出了簡(jiǎn)單的示例代碼,需要的朋友可以參考借鑒,下面來(lái)一起看吧。
    2017-03-03
  • SpringBoot整合Thymeleaf小項(xiàng)目及詳細(xì)流程

    SpringBoot整合Thymeleaf小項(xiàng)目及詳細(xì)流程

    這篇文章主要介紹了SpringBoot整合Thymeleaf小項(xiàng)目,本項(xiàng)目使用SpringBoot開發(fā),jdbc5.1.48,主要涉及到Mybatis的使用,Thymeleaf的使用,用戶密碼加密,驗(yàn)證碼的設(shè)計(jì),圖片的文件上傳(本文件上傳到本地,沒(méi)有傳到數(shù)據(jù)庫(kù))登錄過(guò)濾,需要的朋友可以參考下
    2022-03-03
  • Java窗體動(dòng)態(tài)加載磁盤文件的實(shí)現(xiàn)方法

    Java窗體動(dòng)態(tài)加載磁盤文件的實(shí)現(xiàn)方法

    這篇文章主要介紹了Java窗體動(dòng)態(tài)加載磁盤文件的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2014-03-03
  • java17日期周期格式化處理方案

    java17日期周期格式化處理方案

    Java17引入了新的日期時(shí)間格式化模式B,用于表示一天中的時(shí)間段,如上午、下午、晚上等,該模式根據(jù)CLDR定義,在不同語(yǔ)言環(huán)境下,該模式的輸出結(jié)果會(huì)有所不同,本文給大家介紹java17日期周期格式化處理方案,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • 詳解SpringBoot自定義配置與整合Druid

    詳解SpringBoot自定義配置與整合Druid

    Druid是alibaba開源平臺(tái)上一個(gè)數(shù)據(jù)庫(kù)連接池實(shí)現(xiàn),結(jié)合了C3P0,DBCP等DB池的優(yōu)點(diǎn),同時(shí)也有Web監(jiān)控界面。這篇文章主要介紹了Java之SpringBoot自定義配置與整合Druid的相關(guān)知識(shí),需要的朋友可以參考下
    2021-09-09

最新評(píng)論

尚志市| 临湘市| 根河市| 东港市| 山阳县| 四会市| 阳信县| 仲巴县| 磐石市| 莱西市| 崇明县| 上饶县| 肃宁县| 大渡口区| 嘉善县| 南雄市| 元阳县| 策勒县| 庆安县| 当涂县| 佛山市| 平原县| 香格里拉县| 宝鸡市| 饶平县| 罗山县| 沛县| 闽清县| 金乡县| 临汾市| 榆树市| 若尔盖县| 大渡口区| 上思县| 乐亭县| 阿克苏市| 甘洛县| 喀什市| 广水市| 舟曲县| 西青区|