在春節項目庫中,如果你想擁有你所獲得的數據進行更多的控制,你可以檢查這個項目https://github.com/spring-projects/spring-data-examples/tree/master/rest/projections
反正,你可以使用QueryDSL和Springlets庫從你的Spring數據返回預測爲例庫。
下面是有關如何使用QueryDSL和Springlets在一起的例子:
創建一個只包含要獲得具體領域的一個新的類。例如,對於Owner
實體,您可以創建僅包含id
,firstName
和lastName
字段的OwnerInfo
投影。
public class OwnerInfo {
private Long id;
@Size(min = 3, max = 30)
private String firstName;
@NotNull
@Size(min = 3, max = 30)
private String lastName;
}
繼Owner
例如,創建一個名爲OwnerRepositoryCustom
並定義將返回投影取景器一個新的倉庫接口。
public interface OwnerRepositoryCustom {
public Page<OwnerInfo> findByFirstNameLike(String firstName, Pageable pageable);
}
創建我們的OwnerRepositoryCustom
的實現。該課程應該從Springlets項目延伸QueryDslRepositorySupportExt
。
public class OwnerRepositoryImpl extends QueryDslRepositorySupportExt<Owner> implements OwnerRepositoryCustom {
OwnerRepositoryImpl() {
super(Owner.class);
}
public Page<OwnerInfo> findByFirstNameLike(String firstName, Pageable pageable) {
QOwner owner = QOwner.owner;
JPQLQuery<Owner> query = from(owner);
if (StringUtils.isNotEmpty(firstName)) {
BooleanBuilder searchCondition = new BooleanBuilder();
searchCondition.and(owner.firstName.eq(firstName));
if (searchCondition.hasValue()) {
query.where(searchCondition);
}
}
Path<?>[] paths = new Path<?>[] {owner.id,owner.firstName,owner.lastName};
AttributeMappingBuilder mapping = buildMapper()
.map(ID, owner.id)
.map(FIRST_NAME, owner.firstName)
.map(LAST_NAME, owner.lastName);
return loadPage(query, pageable, Projections.constructor(OwnerInfo.class, owner.id, owner.firstName, owner.lastName));
}
}
現在,從JpaRepository<Owner, Long> and
OwnerRepositoryCustom`接口擴展OwnerRepository
接口。
public interface OwnerRepository extends OwnerRepositoryCustom, JpaRepository<Owner, Long> {
}
通過這些簡單的步驟,您將能夠返回存儲庫方法中的投影。
希望它能幫助,
是它也對你合適,你用'的findAll()'方法,只是不報告的某些字段導出到用戶帶來什麼影響? – Patrick
Hi @Patrick Hi @Patrick是從特定的(本地)查詢中查找All(),只返回具有結構化數據的期望字段,如實體findAll()中那樣。 –
您是否需要使用'@ Projection'或者在沒有使用其他解決方案的情況下使用它? – Patrick