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

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

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

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

public class CarDto implements Serializable {

private static final long serialVersionUID = 1L;

private final String name;

private final String color;

public CarDto(String name, String color) {

this.name = name;

this.color = color;

}

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

@Repository

@Transactional

public class Dao implements GenericDao {

@PersistenceContext

private EntityManager entityManager;

@Override

public S persist(S entity) {

Objects.requireNonNull(entity, "Cannot persist a null entity");

entityManager.persist(entity);

return entity;

}

@Transactional(readOnly=true)

public List fetchCars() {

Query query = entityManager

.createQuery("select new com.jpa.CarDto(c.name, c.color) from Car c",

CarDto.class);

List result = query.getResultList();

return result;

}

Service调用:

@Service

public class CarService {

private final Dao dao;

public CarService(Dao dao) {

this.dao = dao;

}

public List fetchCars() {

return dao.fetchCars();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值