如何透過建構函式和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
- 由等概率生成的0和1構建rand()函式函式
- 預設建構函式、引數化建構函式、複製建構函式、解構函式函式
- C++建構函式解構函式的執行過程C++函式
- C++中建構函式,拷貝建構函式和賦值函式的詳解C++函式賦值
- Android Studio如何快速生成get,set,tostring,建構函式Android函式
- 建構函式與解構函式函式
- JavaScript建構函式和普通函式的區別JavaScript函式
- ## 建構函式函式
- 建構函式函式
- [譯] 建構函式已死,建構函式萬歲!函式
- C++ 建構函式和解構函式C++函式
- 類的建構函式和解構函式函式
- 字元如何透過函式成為html實體字元函式HTML
- c# tcbs之建構函式呼叫建構函式示例C#函式
- C++ 類建構函式和解構函式C++函式
- JavaScript 建構函式JavaScript函式
- 建構函式、this、static函式
- 關於python建構函式的過載Python函式
- 如何透過Spring Data/EntityManager/Session直接獲取DTO資料?SpringSession
- 虛解構函式(√)、純虛解構函式(√)、虛建構函式(X)函式
- C/C++——建構函式、複製建構函式和解構函式的執行時刻C++函式
- PHP筆記:建構函式與解構函式PHP筆記函式
- 輕鬆理解建構函式和原型物件函式原型物件
- 【C++】初始化列表建構函式VS普通建構函式C++函式
- 透過lombok帶你讀透Builder構建器LombokUI
- C++語言之結構體、類、建構函式、拷貝建構函式C++結構體函式
- 生成器 推導式 內建函式函式
- 第五篇:明確拒絕不想編譯器自動生成的拷貝建構函式和賦值運算子過載函式編譯函式賦值
- 建構函式建立物件函式物件
- JavaScript Date()建構函式JavaScript函式
- 11-建構函式函式
- 建構函式詳解函式
- javascript Function()建構函式JavaScriptFunction函式