如何透過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
- 如何透過Spring Data/EntityManager/Session直接獲取DTO資料?SpringSession
- 詳解Dart中如何透過註解生成程式碼Dart
- 如何生成文字: 透過 Transformers 用不同的解碼方法生成文字ORM
- Spark SQL 教程: 透過示例瞭解 Spark SQLSparkSQL
- 如何使用Spring Projections和Join實現DTO?SpringProject
- 如何透過babel去操作ast, 並生成對應的程式碼。BabelAST
- JPA透過表反向生成相關類
- HarmonyOS開發:透過文字生成碼圖
- 透過 3.0 Preview 看 Dubbo 的雲原生變革View
- 透過MySQL Workbench 將 SQL Server 遷移到GreatSQLMySqlServer
- 【譯】透過新的 WinUI 工作負荷和模板改進,深入原生 Windows 開發UIWindows
- oracle 透過pid 找到sid 再找出執行sqlOracleSQL
- java使用bytebuddy動態生成帶泛型的DTOJava泛型
- 使用IDEA+groovy快速生成entity、dto、dao、service、serviceImplIdea
- 如何在 GNU Linux 上透過 Nvm 安裝 Node 和 Npm?LinuxNPM
- 如何透過DBeaver 連線 TDengine?
- 如何透過kubernetes-部署RabbitMQMQ
- OceanBase學習之路46|如何透過 SQL 語句或 OCP 建立資源單元?SQL
- Springboot透過谷歌Kaptcha 元件,生成圖形驗證碼Spring Boot谷歌APT元件
- CMakeFile.txt透過sysroot方式後生成makefile報錯
- 回到基礎:如何用原生 DOM API 生成表格API
- 微服務之間如何共享DTO?微服務
- 如何透過分解和增量更改將單體遷移到微服務?微服務
- 使用AI識別語音和B站影片並透過GPT生成思維導圖AIGPT
- 原生SQL查詢SQL
- OceanBase學習之路36|如何透過 SQL 語句刪除不再使用的資源池?SQL
- Docker - 透過IDEA和Dockerfile部署springbDockerIdeaSpring
- 如何透過iPaaS快速整合SAP ERP
- 透過v$sql_bind_capture 檢視繫結變數。SQLAPT變數
- 【SQL_PLAN】Oracle 透過檢視sql_plan 格式化執行計劃SQLOracle
- 如何透過ForkJoinPool和HikariCP將大型JSON檔案批次處理到MySQL?JSONMySql
- 透過空間佔用和執行計劃瞭解SQL Server的行儲存索引SQLServer索引
- 如何透過簡訊轉發在iPad和Mac上傳送和接收簡訊iPadMac