虚拟化容器,大数据,DBA,中间件,监控。

spring-data-jpa 的DTO查询

17 12月
作者:admin|分类:DBA运维

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的属性,否则会报错。
这种查询,适用于微服务等场景,比如微服务中,某个服务只需要实体中部分字段。

浏览514 评论0
返回
目录
返回
首页
MongoDB中的多表关联查询、聚合管道($lookup、$unwind、$match、$project) 关于PLSQL配置与栽过的坑