中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

發布時間:2020-08-22 23:52:57 來源:腳本之家 閱讀:658 作者:wayne 欄目:編程語言

本文介紹了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提供了一種聲明方式來解決,即聲明一個接口類,然后直接使用這個接口類接受返回的數據即可。下面奉上代碼:

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注解來實現指定字段,除了指定字段也可以做聚合展示,比如有些地方需要展示客戶的全名,這里定義的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

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

向AI問一下細節

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

AI

台中市| 油尖旺区| 北辰区| 宣威市| 高雄县| 基隆市| 江城| 资源县| 介休市| 南雄市| 黑河市| 田阳县| 天津市| 巴林左旗| 陆川县| 太白县| 新竹县| 托里县| 五原县| 固安县| 平顺县| 武威市| 兴安盟| 乐都县| 荣昌县| 隆回县| 穆棱市| 古浪县| 凤凰县| 禄劝| 浦北县| 兴国县| 台南市| 南乐县| 启东市| 兴安盟| 神农架林区| 盖州市| 华蓥市| 新乐市| 周口市|