首页 > 解决方案 > 如何在不同的 SQL 查询中使用相同的 Java 类

问题描述

我正在设计一个 Java 报表应用程序,它可以接收任何 SQL 查询(在已定义的数据库上),然后我在 Vue.js 应用程序的表格网格中显示结果。

我对如何加载适合不同 SQL 查询的 Java 通用/混合类有一些疑问。

我的意思是,是否可以在 Java 中创建一个可以在运行时更改/变异的类,以便我可以在其中映射不同的 SQL 查询?

我知道可以使用java.sql.ResultSetMetaData 来获取列名、表名、列类名等(我不知道是否可以使用hibernate)但我不知道如何映射结果在一个独特的类中。

例如:

我有 3 个不同的查询,它们可能更多:

1) SELECT ID, COUNTRY_NAME FROM COUNTRY;

2) SELECT CODE, NAME, PRICE FROM PRODUCT;

3) SELECT P.CODE, P.NAME, S.NAME 
     FROM PRODUCT P
     JOIN SUPPLIER S
       ON S.ID = P.SUPPLIER_ID
     WHERE P.PRICE > 25;

我需要将这个查询结果(显然一次一个)映射到一个通用类中,然后我将它传递给 Vue 应用程序以在网格中显示它。

这是一种方法吗?

标签: javasqlclassgenericsmapping

解决方案


不要重新发明轮子并使用已经可用和经过良好测试的东西。
您要查找的内容称为Spring JDBC,或者,对于更高的级别,Java Persistence API

用于Spring JDBC提取一组记录可能看起来像

final List<YourClass> results =
          jdbcTemplate.queryForList(
                   "Native SQL statement",
                   queryArguments,
                   YourClass.class
          );

使用JPA实现(例如Hibernate, EclipseLink, ObjectDb),操作可能看起来像

final TypedQuery<YourClass> query = entityManager.createQuery("JPQL statement", YourClass.class);
final List<YourClass> results = query.getResultList();

推荐阅读