第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何使用彈簧數(shù)據(jù)從彈簧啟動(dòng)中的實(shí)體中選擇幾個(gè)字段?

如何使用彈簧數(shù)據(jù)從彈簧啟動(dòng)中的實(shí)體中選擇幾個(gè)字段?

繁花不似錦 2022-09-14 15:17:41
我有一個(gè)用例,我想顯示實(shí)體的內(nèi)容,但隱藏某些字段。我的實(shí)體如下 -實(shí)體public class StudentDetail {@Idprivate Long ID;private String firstName;private String middleName;private String lastName;@JsonFormat(pattern="dd-MMM-yyyy", timezone="IST")@Temporal(TemporalType.DATE)private Date dateOfBirth;}它還具有許多其他屬性,我在這里不顯示。存儲(chǔ)庫(kù) -@Repositorypublic interface StudentDetailsRepository extends JpaRepository<StudentDetail, Integer> {@Query("select d from StudentDetail d where month(d.dateOfBirth) = ?1 ")    List<StudentDetail> getStudentListBasedOnDateOfBirth(int month);}服務(wù)等級(jí) -public List<StudentDetail> getStudentBirthdayDetails(int month) {        List<StudentDetail> StudentDetail = StudentDetailsRepository.getStudentListBasedOnDateOfBirth(month);        return StudentDetail;    }還有一個(gè)控制器類(lèi),它使用參數(shù)調(diào)用 Service 類(lèi)來(lái)過(guò)濾數(shù)據(jù)集。month我想做的是修改存儲(chǔ)庫(kù)類(lèi)中的查詢(xún),并僅包含 、 和 屬性。存儲(chǔ)庫(kù)類(lèi)應(yīng)隱藏該字段。我意識(shí)到以下查詢(xún)將返回過(guò)濾后的項(xiàng)目 -firstnamemiddleNamelastNamedateOfBirthselect d.firstName, d.middleName, d.lastName from StudentDetail d where month(d.dateOfBirth) = ?1 但是,該類(lèi)的返回類(lèi)型是 實(shí)體類(lèi)型 學(xué)生詳細(xì)信息 。僅從中選擇幾個(gè)字段將導(dǎo)致錯(cuò)誤。所以,我想知道我應(yīng)該在/ 和類(lèi)中進(jìn)行哪些更改(假設(shè)只有返回類(lèi)的類(lèi)型會(huì)更改)?Repositoryreposervicecontroller
查看完整描述

1 回答

?
九州編程

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊

這被稱(chēng)為投影,Spring為您提供了兩種實(shí)現(xiàn)它的方法。

請(qǐng)記住,這在JPA術(shù)語(yǔ)中存在,而不僅僅是在春季。


以您的為出發(fā)點(diǎn)Repository


@Repository

public interface StudentDetailsRepository extends JpaRepository<StudentDetail, Integer> {

   ...

}

我們可以使用


interface-基于投影

只需創(chuàng)建一個(gè)界面,表示您想要的結(jié)果

public interface StudentDetailProjection {

   String getFirstName();

   String getMiddleName();

   String getLastName();

}

并將方法添加到您的Repository


@Repository

public interface StudentDetailsRepository extends JpaRepository<StudentDetail, Integer> {

   StudentDetailProjection get...(...);

}

Spring將自動(dòng)子類(lèi)化該接口,它將要求JPA執(zhí)行一個(gè)查詢(xún),該查詢(xún)將僅提取指定的字段。


class基于-基于的投影

的工作方式幾乎與基于接口的投影相同,但不需要代理和子類(lèi),因?yàn)槟跒镾pring提供一個(gè)具體的類(lèi)。

public class StudentDetailProjection {

   private final String getFirstName;

   private final String getMiddleName;

   private final String getLastName;


   public StudentDetailProjection(

      final String getFirstName,

      final String getMiddleName,

      final String getLastName,

   ) {...}


   // Getters

}

文檔更深入。


另外,必讀的是JPA大師弗拉德·米哈爾塞亞的這篇博客文章。


該方法可能看起來(lái)大致類(lèi)似于


@Query("select new your.package.StudentDetailProjection(d.firstName, d.middleName, d.lastName) from StudentDetail d where month(d.dateOfBirth) = ?1")

List<StudentDetailProjection> getStudentListBasedOnDateOfBirth(final int month);

這將遵循具體選項(xiàng) (2),因?yàn)樾枰獦?gòu)造函數(shù)。class


查看完整回答
反對(duì) 回復(fù) 2022-09-14
  • 1 回答
  • 0 關(guān)注
  • 141 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)