如何透過建構函式和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<T, ID extends Serializable> implements GenericDao<T, ID> { @PersistenceContext private EntityManager entityManager; @Override public <S extends T> S persist(S entity) { Objects.requireNonNull(entity, "Cannot persist a null entity"); entityManager.persist(entity); return entity; } @Transactional(readOnly=true) public List<CarDto> fetchCars() { Query query = entityManager .createQuery("select new com.jpa.CarDto(c.name, c.color) from Car c", CarDto.class); List<CarDto> result = query.getResultList(); return result; } |
Service呼叫:
@Service public class CarService { private final Dao dao; public CarService(Dao dao) { this.dao = dao; } public List<CarDto> fetchCars() { return dao.fetchCars(); } } |
相關文章
- 如何透過ResultTransformer和原生SQL或JPQL生成DTO?ORMSQL
- 如何透過javax.persistence.Tuple和JPQL提取DTO?Java
- 如何透過SqlResultSetMapping和NamedNativeQuery生成DTO?SQLAPP
- 如何透過javax.persistence.Tuple和原生SQL生成DTO?JavaSQL
- 如何透過Hibernate/JPA的SqlResultSetMapping生成需要資料的DTO?SQLAPP
- 建構函式和類函式
- 預設建構函式、引數化建構函式、複製建構函式、解構函式函式
- C++中建構函式,拷貝建構函式和賦值函式的詳解C++函式賦值
- 建構函式與解構函式函式
- ## 建構函式函式
- 關於python建構函式的過載Python函式
- C++ 建構函式和解構函式C++函式
- 類的建構函式和解構函式函式
- 預設建構函式和帶預設值的建構函式不能同時存在函式
- 字元如何透過函式成為html實體字元函式HTML
- C++_預設建構函式和過載以及設計模式C++函式設計模式
- JavaScript 建構函式JavaScript函式
- 如何透過Spring Data/EntityManager/Session直接獲取DTO資料?SpringSession
- PHP筆記:建構函式與解構函式PHP筆記函式
- 輕鬆理解建構函式和原型物件函式原型物件
- 【C++】初始化列表建構函式VS普通建構函式C++函式
- 生成器 推導式 內建函式函式
- 11-建構函式函式
- 初識建構函式函式
- JavaScript Date()建構函式JavaScript函式
- 建構函式建立物件函式物件
- 建構函式詳解函式
- 關於建構函式與解構函式的分享函式
- C++入門記-建構函式和解構函式C++函式
- 透過lombok帶你讀透Builder構建器LombokUI
- C++:建構函式的分類和呼叫C++函式
- 建構函式與普通函式的區別函式
- 【譯】JavaScript 工廠函式 vs 建構函式JavaScript函式
- 如何用 Spring AI + Ollama 構建生成式 AI 應用SpringAI
- constructor 未指向建構函式Struct函式
- 回顧Javascript建構函式JavaScript函式
- JS 建構函式與類JS函式
- Dart建構函式介紹Dart函式