如何透過javax.persistence.Tuple和原生SQL生成DTO?
從實體中獲取DTO資料,也就是從DDD聚合中獲取DDD值物件有多種方式,如果我們不使用DTO方式,直接返回完整實體聚合,容易導致效能損失,使用DTO可以讓我們只提取所需的資料。在這個應用程式中,我們展示如何依賴於javax.persistence.Tuple原生SQL生成DTO。點選DTO標籤可獲得更多生成DTO的方式。
主要點:
編制自己的Dao呼叫EntityManager.createNativeQuery(),返回java.persistence.Tuple型別:
假設Car實體:
@Entity @Table(name = "car") public class Car implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String engine; private String color; |
編制自己的DAO:
@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 .createNativeQuery( "select name, color from car", Tuple.class ).getResultList(); return result; } |
Service呼叫:
@Service public class CarService { private final Dao dao; public CarService(Dao dao) { this.dao = dao; } public List<Tuple> fetchCars() { return dao.fetchCars(); } } |
最終Spring Boot中呼叫:
@SpringBootApplication public class TupleAndSqlApplication { private static final Logger logger = Logger.getLogger(TupleAndSqlApplication.class.getName()); @Autowired private CarService carService; public static void main(String args) { SpringApplication.run(TupleAndSqlApplication.class, args); } @Bean public ApplicationRunner init() { return args -> { carService.populateCars(); List<Tuple> cars = carService.fetchCars(); cars.forEach((e) -> logger.info(() -> "Car: " + e.get("name") + "," + e.get("color"))); }; } } |
相關文章
- 如何透過ResultTransformer和原生SQL或JPQL生成DTO?ORMSQL
- 如何透過javax.persistence.Tuple和JPQL提取DTO?Java
- 如何透過SqlResultSetMapping和NamedNativeQuery生成DTO?SQLAPP
- 如何透過建構函式和JPQL生成DTO?函式
- 如何透過Hibernate/JPA的SqlResultSetMapping生成需要資料的DTO?SQLAPP
- 透過shell指令碼定位效能sql和生成報告指令碼SQL
- 如何透過Spring Data/EntityManager/Session直接獲取DTO資料?SpringSession
- 透過shell和sql結合查詢效能sqlSQL
- 透過shell指令碼生成查詢表資料的sql指令碼SQL
- 詳解Dart中如何透過註解生成程式碼Dart
- 透過shell解析dump生成parfile
- 如何透過babel去操作ast, 並生成對應的程式碼。BabelAST
- 透過sql語句分析足彩SQL
- 如何使用Spring Projections和Join實現DTO?SpringProject
- Spark SQL 教程: 透過示例瞭解 Spark SQLSparkSQL
- JPA透過表反向生成相關類
- 通過shell指令碼定位效能sql和生成報告指令碼SQL
- Oracle透過AWR的SQL ordered by Gets和SQL ordered by Reads診斷問題OracleSQL
- 透過 3.0 Preview 看 Dubbo 的雲原生變革View
- Oracle 透過rowid秒優SQLOracleSQL
- 【譯】透過新的 WinUI 工作負荷和模板改進,深入原生 Windows 開發UIWindows
- ?透過系統pid檢視sqlSQL
- 透過ADDM進行SQL調優SQL
- 回到基礎:如何用原生 DOM API 生成表格API
- 如何透過DBeaver 連線 TDengine?
- 透過SQL_ID檢視SQL歷史執行資訊SQL
- 微服務之間如何共享DTO?微服務
- 如何透過設計提升網站的氣質和品質?網站
- 透過top命令抓取cpu高消耗的sqlSQL
- 透過java來格式化sql語句JavaSQL
- 透過使用hint unnest調優sql語句SQL
- 透過MySQL Workbench 將 SQL Server 遷移到GreatSQLMySqlServer
- 將表資料生成SQL指令碼的儲存過程和工具SQL指令碼儲存過程
- java使用bytebuddy動態生成帶泛型的DTOJava泛型
- 使用IDEA+groovy快速生成entity、dto、dao、service、serviceImplIdea
- 如何透過分解和增量更改將單體遷移到微服務?微服務
- 如何在 GNU Linux 上透過 Nvm 安裝 Node 和 Npm?LinuxNPM
- Oracle如何根據SQL_TEXT生成SQL_IDOracleSQL