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

詳解Spring Data JPA系列之投影(Projection)的用法

 更新時間:2017年07月14日 10:55:15   作者:wayne  
本篇文章主要介紹了詳解Spring Data JPA系列之投影(Projection)的用法,具有一定的參考價值,有興趣的可以了解一下

本文介紹了Spring Data JPA系列之投影(Projection)的用法,分享給大家

在JPA的查詢中,有一個不方便的地方,@Query注解,如果查詢直接是

Select C from Customer c

,這時候,查詢的返回對象就是Customer這個完整的對象,包含所有字段,對于我們的示例并沒有什么問題,但是對于比較龐大的domain類,這個查詢時就比較要命,并不是所有的字段都能用到,比較頭疼。另外,如果定義

select c.firstName as firstName,c.lastName as lastName from Customer c

這個查詢結果,返回的對象是Object類型,而且無法直接轉換成Customer對象,這樣用起來就不是很方便。

對于這種情況,JPA提供了一種聲明方式來解決,即聲明一個接口類,然后直接使用這個接口類接受返回的數(shù)據(jù)即可。下面奉上代碼:

1、增加CustomerProjection接口類

package com.example.demo.dto;

import org.springframework.beans.factory.annotation.Value;

/**
 * Created by Administrator on 2017/7/9 0009.
 */
public interface CustomerProjection {
  @Value("#{target.firstName + ' ' + target.lastName}")
  String getFullName();

  String getFirstName();

  String getLastName();
}

這里聲明的方式是可以直接通過get+屬性名,這是普通的,另外也可以通過@Value注解來實現(xiàn)指定字段,除了指定字段也可以做聚合展示,比如有些地方需要展示客戶的全名,這里定義的getFullName()方法及注解@Value即完成這一操作。需要注意這里的@Value中的target表達式寫法及拼接方法。

2、增加CustomerRepository方法

  @Query("SELECT c.firstName as firstName,c.lastName as lastName from Customer c")
  Collection<CustomerProjection> findAllProjectedBy();

3、增加CustomerController方法

  /**
   * find by projections
   */
  @RequestMapping("/findAllProjections")
  public void findAllProjections(){
    Collection<CustomerProjection> projections = repository.findAllProjectedBy();
    System.out.println(projections);
    System.out.println(projections.size());
    for (CustomerProjection projection:projections){
      System.out.println("FullName:"+projection.getFullName());
      System.out.println("FirstName:"+projection.getFirstName());
      System.out.println("LastName:"+projection.getLastName());
    }
  }

這里只是做了簡單示意,深入的內容需要自己去挖掘探索。不過關于Projection的資料比較少,我也是扒了不少資料才理解的差不多了,還需要多多實踐。

另外spring-data-examples項目中有一些JPA的例子,可以用來學習,梳理思路。https://github.com/spring-projects/spring-data-examples/tree/master/jpa

參考:

官方文檔,http://docs.spring.io/spring-data/jpa/docs/current/reference/html/

DEMO,https://github.com/icnws/spring-data-jpa-demo

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java定義隊列結構,并實現(xiàn)入隊、出隊操作完整示例

    Java定義隊列結構,并實現(xiàn)入隊、出隊操作完整示例

    這篇文章主要介紹了Java定義隊列結構,并實現(xiàn)入隊、出隊操作,結合完整實例形式分析了java數(shù)據(jù)結構中隊列的定義、入隊、出隊、判斷隊列是否為空、打印隊列元素等相關操作技巧,需要的朋友可以參考下
    2020-02-02
  • springboot自動掃描添加的BeanDefinition源碼實例詳解

    springboot自動掃描添加的BeanDefinition源碼實例詳解

    這篇文章主要給大家介紹了關于springboot自動掃描添加的BeanDefinition的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-02-02
  • SpringBoot Application事件監(jiān)聽的實現(xiàn)方案

    SpringBoot Application事件監(jiān)聽的實現(xiàn)方案

    這篇文章主要介紹了SpringBoot Application事件監(jiān)聽的實現(xiàn)方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • navicatdesignquery.sql.bak系統(tǒng)找不到指定路徑錯誤的解決方法

    navicatdesignquery.sql.bak系統(tǒng)找不到指定路徑錯誤的解決方法

    今天小編就為大家分享一篇關于navicatdesignquery.sql.bak系統(tǒng)找不到指定路徑錯誤的解決方法,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Java實現(xiàn)多線程模擬龜兔賽跑

    Java實現(xiàn)多線程模擬龜兔賽跑

    這篇文章主要為大家詳細介紹了Java實現(xiàn)多線程模擬龜兔賽跑,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • Java使用fastjson對String、JSONObject、JSONArray相互轉換

    Java使用fastjson對String、JSONObject、JSONArray相互轉換

    這篇文章主要介紹了Java使用fastjson對String、JSONObject、JSONArray相互轉換,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 淺談一下Java多線程斷點復制

    淺談一下Java多線程斷點復制

    這篇文章主要介紹了淺談一下Java多線程斷點復制,當程序執(zhí)行中斷時(出現(xiàn)錯誤、斷電關機),仍可以從上次復制過程中重新開始(不必從頭開始復制),需要的朋友可以參考下
    2023-04-04
  • Java?九宮重排(滿分解法)

    Java?九宮重排(滿分解法)

    本文主要介紹了Java?九宮重排(滿分解法),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java反射技術詳解

    Java反射技術詳解

    這篇文章主要結合實例形式分析了介紹了Java反射技術,小編覺得這篇文章寫的還不錯,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-11-11
  • 關于nacos無法正常下線問題記錄

    關于nacos無法正常下線問題記錄

    這篇文章主要介紹了關于nacos無法正常下線問題記錄,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評論