我正在使用 JDBC(和 spring-jdbc 的 jdbcTemplate)在 Java Web 应用程序中访问我的数据库。我有许多不同的查询,有些是我加入那边的表的地方,一个是子查询,一个是使用此处的组等等。
我经常需要结果来显示由 JSP 生成的特定表格,因此我可以使用返回 List<Map<String, Object>>
的便捷 queryForList 方法。 ,一个列表,其中每一行由一个将列名映射到值的映射表表示。在 JSP 中这很好,无论如何都没有编译时类型检查,没有通过 eclipse 等对属性进行代码完成。
但有时我有 java 代码来处理查询结果,我认为不使用 map ,而是使用真实对象会很有帮助,主要是为了让编译时检查属性是否真的存在,是否具有正确的类型和当然要完成代码。
但如果我想要,我需要为每个可能有很多对象的查询编写一个对象(代码页面只有 setter 和 getter)。
处理这种情况的最佳方法是什么?只写那些该死的对象?或者有更好的方法吗?
最佳答案
...it would be helpful to not work with maps, but with real objects, mainly for having a compile time check whether to properties really exist, have the correct type and of course to have code completion.
您希望编译器理解您的对象模型,所以(至少在 Java 中)恐怕您需要创建它。
一个体面的 IDE 将提供选项来为您从成员变量生成 get/set 方法,这可以节省时间。如果对象模型的存在纯粹是为了在 JDBC 查询上应用某些语义而不是业务逻辑,那么公共(public)成员可能是合适的,避免需要 J2EE 风格的 getter 和 setter Transfer Object图案。只需注意其中的业务逻辑,不要忘记 equals() and hashCode() .
不过,在 Spring JDBC 中,有一些帮助可用于执行与对象之间的映射,例如 RowMapper和 MappingSqlQuery .您可能还想查看对象关系映射框架,例如 Spring ORM为自己节省一些精力。我认为这些方法节省了编写与 SQL 之间的转换代码、管理事务和数据库架构的时间 - 我们仍然需要创建对象模型。
关于java - 将 SQL 结果映射到 java 对象的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6799899/