激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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在线观看免费 | 精品国产一区二区三区在线观看 | 国产精品久久国产精麻豆96堂 | 视频精品一区 | 国产91丝袜在线播放 | 一本色道久久99精品综合蜜臀 | 3级毛片 | 午夜男人免费视频 | 成人黄视频在线观看 | 欧美中文字幕在线视频 | 亚洲精品成人av在线 | 成人免费一区二区三区 | 一级毛片免费高清视频 | 色婷婷a v | 黄色av片三级三级三级免费看 | 欧美精品国产综合久久 | 国产一区精品在线观看 | freexxxhd喷水| 免费一级欧美大片视频在线 | 国产一级淫片a级aaa | 美女擦逼| 成人午夜免费在线观看 | av电影在线播放 | 龙床上的呻吟高h | 国产99久久精品一区二区 | 日韩av片在线播放 | hd欧美free性xxxx护土 | 中文日产幕无线码6区免费版 | 日本aaa一级片 | 九色在线78m | 免费国产自久久久久三四区久久 | 欧洲黄视频 | 免费人成在线播放 | 成码无人av片在线观看网站 | 伦一区二区三区中文字幕v亚洲 | 蜜桃传媒视频麻豆第一区免费观看 | 黄网站免费观看视频 | 欧日一级片 | hd极品free性xxx一护士 | av成人免费在线观看 |