【问题标题】:Map SQL (not JPQL) to a collection of simple Java objects?将 SQL(不是 JPQL)映射到简单 Java 对象的集合?
【发布时间】:2011-10-14 05:01:52
【问题描述】:

我不敢相信我会问这个,但是......

在 Java 中,有什么方法可以执行 SQL 语句(不是 JPQL)并将结果映射到普通旧 Java 对象的 List

我希望能够创建小型轻量级 POJO 对象,然后用原始 SQL 查询填充它们。我明确希望创建复杂的对象:只是基元,没有关系。

一切似乎都以 JPA/JPQL 为中心,但问题是我不想将我的对象绑定到特定的表。

我觉得我要么是:

  • (a) 服用疯狂的药丸,或
  • (b) 缺少一些基本的东西

【问题讨论】:

    标签: java sql orm pojo


    【解决方案1】:

    轻量级映射器不能作为 JDK 本身的一部分使用。您可以使用 Java 标准 JDBC API 滚动您自己的简单映射器(实际上 JPA​​ 实现建立在此之上),或者您可以查看提供简单 SQL 到对象映射器的外部库。我知道MyBatis(原名iBatis)。

    A) 不,我认为您没有服用疯狂的药丸,B) 您是否可能只是错过了 JDBC?

    【讨论】:

      【解决方案2】:

      Sormula 或许可以为所欲为。您需要扩展 Table 并覆盖 getTableName() 和/或 getQualifiedTableName() 以提供所需的表名,因为 sormula 通常将一个 POJO 关联到一个表。请参阅example 2aexample 3a

      【讨论】:

      • 从 1.2 版开始,您不再需要继承来完成此操作。只需使用 Table setTableName 方法。
      【解决方案3】:

      jOOQ 有几个 Record -> POJO 映射功能可能会为您完成这项工作(尽管 jOOQ 可以做得更多)。这是一个例子:

      // A "mutable" POJO class
      public class MyBook1 {
        public int id;
        public String title;
      }
      
      // The various "into()" methods allow for fetching records into your POJOs:
      List<MyBook1> myBooks = create.select().from(BOOK).fetchInto(MyBook1.class);
      

      摘自此处的手册: http://www.jooq.org/doc/latest/manual/sql-execution/fetching/pojos/

      Javadoc 中描述了映射算法: http://www.jooq.org/javadoc/latest/org/jooq/impl/DefaultRecordMapper.html

      虽然上面的示例使用了 jOOQ 的 DSL API,但您也可以使用纯 SQL:

      List<MyBook1> myBooks = create.resultQuery("SELECT * FROM BOOK")
                                    .fetchInto(MyBook1.class);
      

      您甚至可以对 JDBC ResultSet 进行操作,只使用 jOOQ 进行映射:

      ResultSet rs = stmt.executeQuery();
      List<MyBook1> myBooks = create.fetch(rs).into(MyBook1.class);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-07
        • 2015-07-05
        • 2011-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多