2011-10-14 43 views
1

我不能相信我问这个,但是......将SQL(不是JPQL)映射到一组简单的Java对象?

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

我希望能够创建小型轻量化POJO对象,然后让他们用原始的SQL查询填充。我明确表示不是寻找创建复杂的对象:只是原始,没有关系。

似乎一切都围绕JPA/JPQL为中心,但这个问题是,我不希望我的对象绑定到特定的表。

我觉得我可以:

    上疯狂的药丸
  • (一),或
  • (二)缺少的东西根本

回答

3

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

A)不,我想你是不是疯了药丸和B)是有可能,你只是错过了JDBC?

2

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

+0

从版本1.2开始,您不再需要继承来完成此操作。只需使用Table setTableName方法即可。 –

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);