gpt4 book ai didi

java - JDBI 结果集映射器从查询结果集中创建对象列表?

转载 作者:行者123 更新时间:2023-12-01 08:48:51 32 4
gpt4 key购买 nike

选择 JPA 和 Spring-Data 的替代方案,我想尝试使用 JDBI 使用 SQLite 实现我的存储库

存储库代码

 /**
* SQLite implementation of Foo Repository
*/
public class FooRepository implements FooRepository {

private final DBI connection;

/**
* The constructor initialises the connection to the local SQLite file
*
* @param dataSource jdbc connection string e.g. "jdbc:sqlite::resource:db/foo.db"
* @throws IllegalArgumentException when an invalid DB file is given
*/
public FooRepository(final SQLiteDataSource dataSource) {
checkNotNull(dataSource, "dataSource required");
connection = new DBI(dataSource);
}

/**
* Returns a list of Foo objects for a website locale in the DB

* @return List
* @throws SQLException error querying
*/
@Override
public List<Foo> getFoosByWebsiteLocale(f) throws SQLException {
checkNotNull(websiteLocale, "websiteLocale required");

final String fooQuery = query...

Handle queryHandler = connection.open();

final List<Foo> fooList = queryHandler.createQuery(fooQuery)
.map(FooMapper.class);

queryHandler.close();

return fooList;
}
}

映射器

公共(public)类 FooMapper 实现 ResultSetMapper {

    /**
* Construct a Foo object from a record in the result set
* @param index row number
* @param resultRow row
* @param ctx statementcontext
* @return Foo object
* @throws SQLException when accessing sql result set
*/
@Override
public Foo map(final int index, final ResultSet resultRow, final StatementContext ctx) throws SQLException {
return Foo.builder()
.name(resultRow.getString("foo_name"))
.type(resultRow.getString("foo_type"))
.build();
}
}

我正在努力理解如何使用 ResultSetMapper 创建 Foo 对象列表。

JDBI 文档在这方面似乎也有问题:

http://jdbi.org/maven_site/apidocs/org/skife/jdbi/v2/tweak/ResultSetMapper.html

如果您能提供有关如何完成这项工作的帮助,我们将不胜感激。

最佳答案

您的映射器只需将一行映射到一个 Foo 对象。 JDBI 将创建列表并将对象放入列表中。即:

final List<Foo> fooList = queryHandler.createQuery(fooQuery).map(FooMapper.class).list();

关于java - JDBI 结果集映射器从查询结果集中创建对象列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42515987/

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