JDBI resultsetmapper 从查询结果集中创建对象列表?
JDBI resultsetmapper create list of objects from query resultset?
选择 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 class 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();
选择 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 class 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();