【问题标题】:Mapping raw sql query into DTO object Spring将原始 sql 查询映射到 DTO 对象 Spring
【发布时间】:2020-06-11 09:09:33
【问题描述】:

春季启动,Java 11,POSTGRES

我有一个大的 SQL 查询:

select c.id,c.image_url,c.status,c.name, cat.id,cat.name
from client_organization o join organization c
on o.organization_id = c.id
join client w on o.client_id = w.id
join org_category cat on c.category_id = cat.id
where w.id = ?

所以我需要将给定的结果转换为数据传输对象列表 (DTO)。 如果很重要,这是我的 DTO(不包括构造函数、getter 和 setter):

public class OrganizationListDto {
    Long id;
    String image;
    Boolean status;
    String name;
    Long categoryId;
    String categoryName;
}

我这几天一直在寻找解决方案,发现这个操作可以通过不同的方式实现(jdbc、hibernate 等) 所以请解释一下我什么时候需要使用它们? 这个操作如何实现?

【问题讨论】:

    标签: java sql postgresql hibernate jdbc


    【解决方案1】:
    Follow the below approach have used spingJpa
    

    @服务 公共类OrganizationServiceImpl

    {
        @Autowired
        OrganizationListRepository organizationListRepository;
    
            public OrganizationListDto  fetch(usrId)
            {
            OrganizationListDto orgListData = new OrganizationListDto();
        List<OrganizationListMapping> orgData = organizationListRepository.fetchData(usrId);
        BeanUtils.copy(orgData,orgListData)
    
            return orgData;
            }
    
    }
    

    @Repository 公共接口 OrganizationListRepository 扩展 JpaRepository{

    @Query(native="true",value="select  cat.id as id,cat.name as name
    from client_organization o join organization c
    on o.organization_id = c.id
    join client w on o.client_id = w.id
    join org_category cat on c.category_id = cat.id
    where w.id = usrId"
    OrganizationListMapping fetchData(@Param ("usrId") Integer usrId);
    }
    
    public interface OrganizationListMapping {
        public Long getId();
        public String getName();
    
    }
    
    
    public class OrganizationListDto {
        Long id;
        String name;
    
    }
    

    【讨论】:

    • 问题是,OrganizationListDTO 不是@Entity。
    • 是的,只有它的 DTO 由于使用了接口 OrganizationListMapping,查询的结果保存在这些变量中......从该变量中它被复制到 DTO 中,您只需要实体来扩展 OrganizationListRepository 接口中的 JPARepository 跨度>
    猜你喜欢
    • 2016-12-05
    • 1970-01-01
    • 2021-08-13
    • 2020-12-08
    • 1970-01-01
    • 2018-09-11
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多