簡體   English   中英

如何在不使用 JOOQ 代碼生成的情況下獲取 Pojo 中的數據庫行?

[英]How can I fetch database rows in Pojo without using JOOQ code generation?

我正在嘗試在沒有代碼生成的情況下使用 JOOQ。 我有一個看起來像這樣的 dao 類

public class FilesDao { 
public List<FilePojo> getAllFiles() {
    DataSource dataSource = DataSourceFactory.getTestiDataSource();
    List<FilePojo> filePojos = new ArrayList<>();
    try (Connection con = dataSource.getConnection()) {
        DSLContext create = DSL.using(con, SQLDialect.MARIADB);
        filePojos = create.select(field("tiedosto.id"), field("tiedosto.nimi"), field("tiedosto.koko_tavua"),
                field("tiedosto.sisalto"), field("tiedosto.hlo_id"))
                .from(table("tiedosto"))
                .where(field("minioupload").eq((byte) 0))
                .fetch().into(FilePojo.class);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return filePojos;
   }
}

和一個看起來像這樣的 Pojo 類

import javax.persistence.Column;
import javax.persistence.Table;

@Table(name="tiedosto")
public class FilePojo {

@Column(name = "id")
private Integer id;

@Column(name = "hlo_id")
private Integer customerId;

@Column(name = "koko_tavua")
private Integer fileSize;

@Column(name = "nimi")
private String fileName;

@Column(name = "sisalto")
private byte[] content;}
//Getters setters omitted

當我嘗試使用這樣的主要方法從表中讀取時

public class App {
public static void main(String[] args) {
    FilesDao mydao = new FilesDao();
    List<FilePojo> myList = mydao.getAllFiles();
    for (FilePojo filePojo : myList) {
        System.out.println("==========================================" + "\n" +
                filePojo.getId() + " " +
                filePojo.getCustomerId() + " " +
                filePojo.getFileName() + " " +
                filePojo.getFileSize() + " " +
                filePojo.getContent() + " " +
                "==========================================");
    }
  }
}

輸出如下在此處輸入圖片說明

我可以看到 SQL 查詢運行良好並列出了所有匹配的行,但 pojo 返回空值。 我在這里做錯了什么? 有人可以指出我正確的方向嗎? 我真的很感激任何形式的幫助。

我不確定這是錯誤還是功能 當您可能應該使用標識符構建 API時,您正在使用純 SQL 模板API 當你寫

field("tiedosto.id")

然后,jOOQ(可能是錯誤的)認為您的列名為`tiedosto.id` ,名稱中帶有句點。 當它真的應該被限定為`tiedosto`.`id` 有幾個可能的修復:

繼續使用純 SQL 模板 API

但是,不要限定名稱:

field("id")

使用標識符構建 API

field(name("tiedosto", "id"))

使用代碼生成器

當然,這應該始終是您的首選。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM