Java 如何在Pojo中获取数据库行而不使用JOOQ代码生成?
我试图在不生成代码的情况下使用JOOQ。我有一个像这样的dao类Java 如何在Pojo中获取数据库行而不使用JOOQ代码生成?,java,pojo,jooq,Java,Pojo,Jooq,我试图在不生成代码的情况下使用JOOQ。我有一个像这样的dao类 public class FilesDao { public List<FilePojo> getAllFiles() { DataSource dataSource = DataSourceFactory.getTestiDataSource(); List<FilePojo> filePojos = new ArrayList<>(); try (Connectio
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;
}
}
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() + " " +
"==========================================");
}
}
}
当我尝试使用这样的主方法从表中读取时
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;
}
}
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() + " " +
"==========================================");
}
}
}
公共类应用程序{
公共静态void main(字符串[]args){
FilesDao mydao=newfilesdao();
List myList=mydao.getAllFiles();
for(FilePojo FilePojo:myList){
System.out.println(“=========================================================================”+“\n”+
filePojo.getId()+“”+
filePojo.getCustomerId()+“”+
filePojo.getFileName()+“”+
filePojo.getFileSize()+“”+
filePojo.getContent()+“”+
"==========================================");
}
}
}
结果如下
我可以看到SQL查询运行良好,列出了所有匹配的行,但pojo返回空值。我做错了什么?有人能给我指一下正确的方向吗?我真的非常感谢您的帮助。我还不确定这是否是一个问题。当您可能应该使用时,您正在使用。当你写作时
字段(“tiedosto.id”)
然后,jOOQ(可能错误地)认为您的列名为`tiedosto.id`
,名称中有一个句点。当它确实应该被限定为`tiedosto`.`id`
时。有几个可能的修复方法:
继续使用普通SQL模板API
但是,不要限定名称:
字段(“id”)
使用标识符构建API
字段(名称(“tiedosto”、“id”))
使用代码生成器
当然,这应该是您的首选。非常感谢您的回答。删除表名成功了。我通常更喜欢代码生成器,我只是想和jooq玩一下。