如何通过javax.persistence.Tuple和JPQL提取DTO?

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

内容简介:从实体中获取DTO数据,也就是从DDD聚合中获取DDD值对象有多种方式,如果我们不使用DTO方式,直接返回完整实体聚合,容易导致性能损失,使用DTO可以让我们只提取所需的数据。在这个应用程序中,我们展示如何依赖于javax.persistence.Tuple和JPQL生成DTO。点击#DTO标签可获得更多生成DTO的方式。主要方式:编制自己的Dao调用EntityManager.createQuery(),返回java.persistence.Tuple类型:

从实体中获取DTO数据,也就是从DDD聚合中获取DDD值对象有多种方式,如果我们不使用DTO方式,直接返回完整实体聚合,容易导致性能损失,使用DTO可以让我们只提取所需的数据。在这个应用程序中,我们展示如何依赖于javax.persistence.Tuple和JPQL生成DTO。点击#DTO标签可获得更多生成DTO的方式。

主要方式:

编制自己的Dao调用EntityManager.createQuery(),返回java.persistence.Tuple类型:

@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<Tuple> fetchCars() {
        List<Tuple> result = entityManager
                .createQuery(
                        </font><font>"select c.name as name, c.color as color from Car c"</font><font>, Tuple.<b>class</b>
                ).getResultList();

        <b>return</b> result;
    }

    <b>protected</b> EntityManager getEntityManager() {
        <b>return</b> entityManager;
    }
}
</font>

在服务中调用:

@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<Tuple> fetchCars() {
        <b>return</b> dao.fetchCars();
    }
}

客户端调用:

List<Tuple> cars = carService.fetchCars();
            
cars.forEach((e) -> logger.info(() -> <font>"Car: "</font><font> + e.get(</font><font>"name"</font><font>) + </font><font>","</font><font> + e.get(</font><font>"color"</font><font>)));
</font>

源码下载


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

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

Hacking Growth

Hacking Growth

Sean Ellis、Morgan Brown / Crown Business / 2017-4-25 / USD 29.00

The definitive playbook by the pioneers of Growth Hacking, one of the hottest business methodologies in Silicon Valley and beyond. It seems hard to believe today, but there was a time when Airbnb w......一起来看看 《Hacking Growth》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具