选择替代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;
}
}
映射器
公共类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();