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

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

内容简介:从实体中获取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>

源码下载


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

查看所有标签

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

社交红利2.0

社交红利2.0

徐志斌 / 中信出版社 / 2015-9 / 42元

大型社交网络发展至今,开始显露出更为惊人的力量。有一个独特现象与这一结果相伴相生,即新应用或服务一进入社交网络就即时引爆,就像用户在等待它出现一样。随即开始的病毒式扩散,让创业者成为全民话题的焦点。但这一切是如何实现的?具备哪些特征的合作伙伴才可以被即时引爆? 作者从其长期追踪的近30个一进入微博、微信就引爆的经典案例中甄选出若干典型案例。从大量一手鲜活的后台数据入手,并结合腾讯对社交网络的......一起来看看 《社交红利2.0》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

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

HEX HSV 互换工具