内容简介:获取超出需要的数据更容易导致性能损失。使用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(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Java构造函数与普通函数用法详解
- 构造函数、原型、原型链、继承
- Vue源码: 构造函数入口
- Hashmap源码解析-构造函数
- JavaScript 构造函数的继承
- Swift学习之构造函数与析构函数
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Python 3学习笔记(上卷)
雨痕 / 电子工业出版社 / 2018-1 / 89
经过9 年的发展,Python 3 生态已相当成熟。无论是语言进化、解释器性能提升,还是第三方支持,都是如此。随着Python 2.7 EOF 日趋临近,迁移到Python 3 的各种障碍也被逐一剔除。是时候在新环境下学习或工作了。 人们常说Python 简单易学,但这是以封装和隐藏复杂体系为代价的。仅阅读语言规范很难深入,亦无从发挥其应有能力,易学难精才是常态。《Python 3学习笔记(......一起来看看 《Python 3学习笔记(上卷)》 这本书的介绍吧!