我不敢相信我问这个,但是......
在Java中,有没有办法执行SQL语句(而不是JPQL)并将结果映射到普通旧Java对象的List
?
我希望能够创建小的轻量级POJO对象,然后通过原始SQL查询填充它们。我明确地不希望创建复杂的对象:只是原语,没有关系。
所有内容似乎都围绕着JPA / JPQL,但问题在于我不想将我的对象绑定到特定的表。
我觉得我要么:
答案 0 :(得分:3)
轻量级映射器不可用作JDK本身的一部分。您可以使用Java的标准JDBC API(实际上JPA实现构建在其上)来自行编写简单的映射器,或者您可以查看提供简单的SQL-to-Object映射器的外部库。我知道MyBatis(以前称为iBatis)。
A)不,我认为你不是疯狂的药丸而且B)你有可能错过了JDBC吗?
答案 1 :(得分:2)
Sormula也许可以做你想做的事。您需要扩展Table并覆盖getTableName()和/或getQualifiedTableName()以提供所需的表名,因为sormula通常将一个POJO与一个表相关联。请参阅example 2a和example 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);