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

溫馨提示×

溫馨提示×

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

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

詳解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

镇远县| 淮南市| 盱眙县| 从化市| 江安县| 军事| 甘南县| 鄂州市| 自贡市| 扎囊县| 沐川县| 什邡市| 修武县| 桂阳县| 古田县| 祁门县| 三台县| 沁源县| 云浮市| 太仆寺旗| 顺义区| 临武县| 台北县| 开封县| 六枝特区| 阿拉善右旗| 四会市| 安龙县| 玛纳斯县| 兴山县| 廉江市| 独山县| 安乡县| 中卫市| 广南县| 轮台县| 阿克陶县| 霍城县| 泸西县| 嘉兴市| 张北县|