一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 詳解Spring Data JPA系列之投影(Projection)的用法

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

2020-12-02 13:35wayne Java教程

本篇文章主要介紹了詳解Spring Data JPA系列之投影(Projection)的用法,具有一定的參考價值,有興趣的可以了解一下

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

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

?
1
Select C from Customer c

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

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

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

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

1、增加CustomerProjection接口類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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方法

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

3、增加CustomerController方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
 * 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

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

原文鏈接:http://spring4all.com/article/119

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产午夜免费不卡精品理论片 | 亚洲美女人黄网成人女 | 亚洲精品动漫在线观看 | 精品国产人妻国语 | 欧美一级免费看 | 亚洲日本va中文字幕 | 精品AV亚洲乱码一区二区 | 国产一区国产二区国产三区 | 91精品国产91热久久久久福利 | 天天夜夜啦啦啦 | 情人我吃糖果小说 | 欧美女孩videos| 男人天堂色男人 | 亚洲成人99 | 狠狠狠地啪香蕉 | 亚洲一区 在线播放 | yellow在线 | 欧美日韩久久中文字幕 | 国产射频放大器 | 免费看片aⅴ免费大片 | 成人中文字幕在线高清 | 99久久精品久久久久久清纯 | 狗老公小说| 精品免费国产一区二区三区 | 乌克兰肥熟 | 亚洲一区二区三区久久精品 | 日本一在线中文字幕天堂 | 亚洲酒色1314狠狠做 | 精品视频免费在线观看 | 日本护士xxxx视频免费 | 寡妇快点好大好爽视频 | 韩剧消失的眼角膜免费完整版 | 亚洲精品国产自在现线最新 | 亚洲美洲国产日产 | 亚洲成人mv | 深夜日韩 | 91香蕉官网 | 娇小异类videos | free性日本 | 99网站在线观看 | 操老妇 |