gpt4 book ai didi

java - JDBI,使用 sql 查询检索数据到自定义对象(构造函数)而不是 Map

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:41:50 26 4
gpt4 key购买 nike

所以当我们使用 JDBI 从数据库中查询时,它会将它放入一个 Map<String, Object> 中。类型。

我想把它作为我的自定义对象(构造函数)而不是 Map<String, Object> .

DBI dbi = establishConnection(url, userName, passWord);
Handle handle = dbi.open();
List<Map<String, Object>> rs = handle.select("select * from sometable");

相反,我想使用:

List<customizedObject> rs = handle.select("select * from sometable");

在哪里customizedObject类是一个包含所有列属性的对象。

有什么办法吗?我找到了一些相关文档,但我无法真正理解实现。

http://jdbi.org/sql_object_api_queries/

最佳答案

另请参阅文档中的上一页,其中显示了如何链接您的 HandleDBI与映射器。

本质上,您需要一个映射器来转换 ResultSet到所需的对象和一个引用映射器的接口(interface)。

让我们假设一个最小的例子。首先需要提供映射器:

public class CustomizedObjectMapper implements ResultSetMapper<customizedObject> {

@Override
public customizedObject map(int index, ResultSet r, StatementContext ctx)
throws SQLException {
return new customizedObject(r.getString("uuid"), r.getString("other_column"));
}

}

然后我们需要一个接口(interface)来定义哪个查询提供传递给映射器类的数据。一个结果行导致一次调用 CustomizedObjectMapper.map(...) :

@RegisterMapper(CustomizeObjectMapper.class)
public interface CustomizeObjectQuery {

@SqlQuery("Select uuid, other_column from schema.relation")
List<customizedObject> get();
}

最后,可以检索对象:List<customizedObject> test = dbi.open(CustomizeObjectQuery.class).get() .

您也可以像这样将组件单独放在一起并省略接口(interface): dbi.open().createQuery("Select uuid, other_colum from schema.relation").map(new EventMapper()).list()

关于java - JDBI,使用 sql 查询检索数据到自定义对象(构造函数)而不是 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23066465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com