将SQL(而不是JPQL)映射到简单Java对象的集合?

时间:2011-10-14 05:01:52

标签: java sql orm pojo

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

在Java中,有没有办法执行SQL语句(而不是JPQL)并将结果映射到普通旧Java对象的List

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

所有内容似乎都围绕着JPA / JPQL,但问题在于我不想将我的对象绑定到特定的表。

我觉得我要么:

  • (a)关于疯狂药丸,或
  • (b)遗漏了一些基本的东西

3 个答案:

答案 0 :(得分:3)

轻量级映射器不可用作JDK本身的一部分。您可以使用Java的标准JDBC API(实际上JPA实现构建在其上)来自行编写简单的映射器,或者您可以查看提供简单的SQL-to-Object映射器的外部库。我知道MyBatis(以前称为iBatis)。

A)不,我认为你不是疯狂的药丸而且B)你有可能错过了JDBC吗?

答案 1 :(得分:2)

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

答案 2 :(得分:0)

jOOQ有几个记录 - > 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);