我需要做些什么来修复"No Mapper注册"当试图流的结果集从一个SqlObject DAO?该方法用@RegisterBeanMapper注释,文档似乎不完整。
根据https://jdbi.org/#_consumer_arguments:
15.1.3。消费者参数
作为一种特殊情况,除了使用其他绑定实参之外,还可以使用Consumer实参。
除非类型T是Stream或Iterator,否则对结果集中的每一行执行一次消费者操作。参数T的静态类型决定行类型。
如果消费者实现了Consumer
或Consumer ,则消费者执行一次,迭代器或流保存结果。参数T的静态类型也决定了这里映射的行类型。当在迭代器或流中使用消费者参数时,jdbc将在回调完成后管理并关闭它们。
我在DAO接口中使用以下代码:
@SqlQuery(" SELECT id, title FROM " + TABLE_XML_RECORDS //
+ " WHERE" //
+ " issuedate IS NULL" //
+ " AND sort_date <= :issueweek" //
+ " AND sort_date >= :oldest" //
+ " AND sort_date IS NOT NULL" //
+ " ORDER BY sort_date DESC")
@RegisterBeanMapper(IdTitle.class)
void getRecordIdsFor(@Bind("issueweek") LocalDate issueweek, @Bind("oldest") LocalDate oldestSortDate, java.util.function.Consumer<Stream<IdTitle>> consumer);
但是我得到:
No mapper registered for type java.util.stream.Stream<clarivate.mariadb.models.IdTitle>
我试着搜索代码片段,但我的搜索foo是失败的,文档不包含一个简单的具体的例子。
通过更新到最新的3.x解决。这似乎是一个新添加的功能。
final JDBI = '3.35.0'
api "org.jdbi:jdbi3-core:${JDBI}"
api "org.jdbi:jdbi3-sqlobject:${JDBI}"
api "org.jdbi:jdbi3-stringtemplate4:${JDBI}"