有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

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

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

我觉得我要么:

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

共 (3) 个答案

  1. # 1 楼答案

    轻量级映射器不是JDK本身的一部分。您可以使用Java的标准JDBC API(事实上,JPA实现就是在这个基础上构建的)来运行自己的简单映射器,也可以查看提供简单SQL到对象映射器的外部库。我知道MyBatis(以前称为iBatis)

    A)不,我认为你没有服用疯狂的药片,B)你可能只是错过了JDBC吗

  2. # 2 楼答案

    Sormula也许能做你想做的事。您需要扩展Table并重写getTableName()和/或getQualifiedTableName(),以提供所需的表名,因为sormula通常将一个POJO关联到一个表。见example 2aexample 3a

  3. # 3 楼答案

    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结果集进行操作,只使用jOOQ进行映射:

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