如何透過javax.persistence.Tuple和JPQL提取DTO?
從實體中獲取DTO資料,也就是從DDD聚合中獲取DDD值物件有多種方式,如果我們不使用DTO方式,直接返回完整實體聚合,容易導致效能損失,使用DTO可以讓我們只提取所需的資料。在這個應用程式中,我們展示如何依賴於javax.persistence.Tuple和JPQL生成DTO。點選DTO標籤可獲得更多生成DTO的方式。
主要方式:
編制自己的Dao呼叫EntityManager.createQuery(),返回java.persistence.Tuple型別:
@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<Tuple> fetchCars() { List<Tuple> result = entityManager .createQuery( "select c.name as name, c.color as color from Car c", Tuple.class ).getResultList(); return result; } protected EntityManager getEntityManager() { return entityManager; } } |
在服務中呼叫:
@Service public class CarService { private final Dao dao; public CarService(Dao dao) { this.dao = dao; } public List<Tuple> fetchCars() { return dao.fetchCars(); } } |
客戶端呼叫:
List<Tuple> cars = carService.fetchCars(); cars.forEach((e) -> logger.info(() -> "Car: " + e.get("name") + "," + e.get("color"))); |
相關文章
- 如何透過建構函式和JPQL生成DTO?函式
- 如何透過javax.persistence.Tuple和原生SQL生成DTO?JavaSQL
- 如何透過ResultTransformer和原生SQL或JPQL生成DTO?ORMSQL
- 如何透過SqlResultSetMapping和NamedNativeQuery生成DTO?SQLAPP
- 如何使用Hibernate/JPA的JPQL/HQL查詢提取?
- 如何透過Spring Data/EntityManager/Session直接獲取DTO資料?SpringSession
- 如何透過Hibernate/JPA的SqlResultSetMapping生成需要資料的DTO?SQLAPP
- 如何使用Spring Projections和Join實現DTO?SpringProject
- 請教:如果透過cache來提取oracle中的資料?Oracle
- 如何透過DBeaver 連線 TDengine?
- 微服務之間如何共享DTO?微服務
- 如何透過設計提升網站的氣質和品質?網站
- 使用JMeter的JSON提取器:透過遞迴下降查詢,從介面響應中提取特定欄位JMeterJSON遞迴
- 如何透過分解和增量更改將單體遷移到微服務?微服務
- 如何在 GNU Linux 上透過 Nvm 安裝 Node 和 Npm?LinuxNPM
- 跨境電商如何透過API選品API
- 透過ssh工具啟動VNC,Windows系統如何透過ssh工具啟動VNCVNCWindows
- 如何透過SQLyog分析MySQL資料庫MySql資料庫
- 如何透過kubernetes-部署RabbitMQMQ
- 如何透過iPaaS快速整合SAP ERP
- CRM系統透過特性如何選擇?
- 如何透過ForkJoinPool和HikariCP將大型JSON檔案批次處理到MySQL?JSONMySql
- 如何透過 Geth、Node.js 和 UNIX/PHP 訪問以太坊節點Node.jsPHP
- 如何透過簡訊轉發在iPad和Mac上傳送和接收簡訊iPadMac
- Java求職者如何提高面試的透過率?Java求職面試
- 如何透過 Serverless 提高 Java 微服務治理效率?ServerJava微服務
- 如何透過華為分析提升產品留存率?
- 如何透過HomePod播放mac中的音訊Mac音訊
- 如何透過CRM系統進行合同管理?
- 如何透過代理IP實現Facebook群控?
- MAUI Blazor 如何透過url使用本地檔案UIBlazor
- 【Mysql】如何透過binlog恢復資料MySql
- 如何透過ZBlogPHP啟用Gzip壓縮?PHP
- JPA之使用JPQL進行CRUD操作
- dto= Presentation Model?
- 如何透過文字服務轉發在iPad和Mac上傳送和接收簡訊iPadMac
- ValueObject和DTO模式的一些疑問Object模式
- 技巧:如何提取excel表格中的姓名和聯絡方式Excel