spring-data-jpa 的DTO查詢
之前在需要dto的時候,要么采用querydsl的投影查詢,要么查出一個完整物體資料后再向dto中set值,這兩種方式都比較多的代碼書寫量,
今天公司的大神教我一個方法,在這里記錄一下,僅供大家參考,如果有錯誤,請及時告知,我將虛心修改,嘿嘿,下面開始正文:
querydsl的投影查詢
public List<OrgVo> findOrgVosByPid(String pid) {
QOrg qOrg = QOrg.org;
BooleanBuilder builder = new BooleanBuilder();
builder.and(qOrg.delFlag.eq(0));
builder.and(qOrg.pid.eq(pid));
QBean<OrgVo> bean = Projections.bean(OrgVo.class, qOrg.id, qOrg.code, qOrg.name, qOrg.enterpriseLink, qOrg.legalPerson, qOrg.tel, qOrg.address, qOrg.pid, qOrg.orderNum,
qOrg.category, qOrg.enterpriseInfo, qOrg.attId, qOrg.des, qOrg.type);
JPAQuery<OrgVo> query = queryFactory.select(bean).from(qOrg).where(builder).orderBy(qOrg.createTime.desc());
return query.fetch();
}
采用spring-data-jpa 的DTO查詢
1,首先,創建一個DTO
OrgVo代碼如下:
package mytest.com.common.vo;
import lombok.Value;
@Value
public class OrgVo {
private String id;
private String code;
private String name;
private String enterpriseLink;
private String legalPerson;
private String tel;
private String address;
private String pid;
private String category;
private String attId;
private Integer type;
}
2,在orgDao中宣告一個泛型介面
orgDao代碼如下:
@Repository
public interface OrgDao extends JpaSpecificationExecutor<Org>, JpaRepository<Org, String>, PagingAndSortingRepository<Org, String> {
List<Org> findByDelFlagAndCode(Integer delFlag, String code);
<T> Collection<T> findByPidAndDelFlag(String pid, Integer delFlag, Class<T> type);
}
3,在service中呼叫這個泛型方法查詢
public List<OrgVo> findOrgVo(String pid) {
List<OrgVo> list = new ArrayList<>();
Collection<OrgVo> collection = orgDao.findByPidAndDelFlag(pid,0,OrgVo.class);
if (CollectionUtils.isNotEmpty(collection)) {
list = collection.stream().collect(Collectors.toList());
}
return list;
}
注意:
其中,OrgVo要加@Value注釋,并且,其屬性必須都是Org的部分資料庫欄位,不能含有其他屬性或者Org中被標記為@Transient的屬性,否則會報錯,
這種查詢,適用于微服務等場景,比如微服務中,某個服務只需要物體中部分欄位,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/235560.html
標籤:其他
上一篇:MYSQL資料定義功能(DDL)
下一篇:SQL注入基礎知識(1)
