如何通过构造函数和JPQL生成DTO?

栏目: Java · 发布时间: 5年前

内容简介:获取超出需要的数据更容易导致性能损失。使用DTO可以让我们只提取所需的数据。在这个应用程序中,我们依赖于Constructor Expression和JPQLL生成DTO。点击#DTO标签可获得更多生成DTO的方式。同样,在DDD编程中,从DDD聚合中获取DDD值对象有多种方式,如果我们不使用DTO方式,直接返回完整实体聚合,容易导致性能损失,使用DTO可以让我们只提取所需的数据。1. 编写一个带有构造参数的DTO,其实这是一个DDD值对象:

获取超出需要的数据更容易导致性能损失。使用DTO可以让我们只提取所需的数据。在这个应用程序中,我们依赖于Constructor Expression和JPQLL生成DTO。点击#DTO标签可获得更多生成DTO的方式。

同样,在DDD编程中,从DDD聚合中获取DDD值对象有多种方式,如果我们不使用DTO方式,直接返回完整实体聚合,容易导致性能损失,使用DTO可以让我们只提取所需的数据。

1. 编写一个带有构造参数的DTO,其实这是一个DDD值对象:

<b>public</b> <b>class</b> CarDto implements Serializable {

    <b>private</b> <b>static</b> <b>final</b> <b>long</b> serialVersionUID = 1L;

    <b>private</b> <b>final</b> String name;
    <b>private</b> <b>final</b> String color;

    <b>public</b> CarDto(String name, String color) {
        <b>this</b>.name = name;
        <b>this</b>.color = color;
    }

2. 编写自己的DAO,使用JPQL“select new com.jpa.CarDto(c.name, c.color) from Car c”创建带参数的DTO。

@Repository
@Transactional
<b>public</b> <b>class</b> Dao<T, ID <b>extends</b> Serializable> implements GenericDao<T, ID> {

    @PersistenceContext
    <b>private</b> EntityManager entityManager;

    @Override
    <b>public</b> <S <b>extends</b> T> S persist(S entity) {
        
        Objects.requireNonNull(entity, <font>"Cannot persist a null entity"</font><font>);
        
        entityManager.persist(entity);

        <b>return</b> entity;
    }

    @Transactional(readOnly=<b>true</b>)
    <b>public</b> List<CarDto> fetchCars() {
        Query query = entityManager
                .createQuery(</font><font>"select new com.jpa.CarDto(c.name, c.color) from Car c"</font><font>,
                        CarDto.<b>class</b>);                
        List<CarDto> result = query.getResultList();

        <b>return</b> result;
    }
</font>

Service调用:

@Service
<b>public</b> <b>class</b> CarService {

    <b>private</b> <b>final</b> Dao dao;

    <b>public</b> CarService(Dao dao) {
        <b>this</b>.dao = dao;
    }

    <b>public</b> List<CarDto> fetchCars() {
        <b>return</b> dao.fetchCars();
    }
}

源码下载


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

持续交付

持续交付

Jez Humble、David Farley / 乔梁 / 人民邮电出版社 / 2011-10 / 89.00元

Jez Humble编著的《持续交付(发布可靠软件的系统方法)》讲述如何实现更快、更可靠、低成本的自动化软件交付,描述了如何通过增加反馈,并改进开发人员、测试人员、运维人员和项目经理之间的协作来达到这个目标。《持续交付(发布可靠软件的系统方法)》由三部分组成。第一部分阐述了持续交付背后的一些原则,以及支持这些原则的实践。第二部分是本书的核心,全面讲述了部署流水线。第三部分围绕部署流水线的投入产出讨......一起来看看 《持续交付》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具