- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我可以使用 @MapResultAsBean
注释将 jdbi 查询的结果映射到我感兴趣的 bean,如下所示:
@SqlQuery("select * from some_table where id = :some_id")
@MapResultAsBean
SomeBean findById(@Bind("some_id") String someId);
如果应用程序中使用的 jdbi
实例尚未注册到任何自定义映射器,则此方法工作正常。
但是我正在处理的应用程序有一个自定义映射器,如下所示:
class CustomMapperFactory implements ResultSetMapperFactory {
// Override methods to provide custom conversion logic
}
此映射器在应用程序开始时注册到 jdbi
实例,如下所示:
final DBIFactory factory = new DBIFactory();
final DBI jdbi = factory.build(environment, conf.getDatabase(), "postgresql");
jdbi.registerMapper(new CustomMapperFactory());
CustomMapperFactory
覆盖方法并提供将任何类型的结果从数据库转换为相关 bean 类型的逻辑。正是这个 super 转换器负责处理整个应用程序中所有 DB 到 POJO 的转换。
我的问题是:有没有一种方法可以告诉 jdbi
继续使用此 CustomMapperFactory
将结果从数据库转换为所有类型的 bean,SomeBean< 类型除外
.
我尝试添加 @MapResultAsBean
,但 CustomMapperFactory
仍向 jdbi
注册。程序运行,但是使用 jdbi
注册的自定义映射器优先,而 @MapResultAsBean
根本没有效果,只是被忽略了。
在互联网上找不到太多相关信息。有什么帮助吗?我们使用 dropwizard-jdbi-1.2.2
显然是 postgres
数据库。
最佳答案
您可以通过几种方式做到这一点:
一个。告诉 JDBI 您的 CustomMapperFactory
没有映射 SomeBean
类型。这样,JDBI 将回退到使用 @MapResultAsBean
:
public class CustomResultMapperFactory implements ResultSetMapperFactory {
@Override
public boolean accepts(Class type, StatementContext ctx) {
if (type == SomeBean.class) {
return false;
}
//....
}
}
或
为 SomeBean
类型显式返回 BeanMapper
:
public class CustomResultMapperFactory implements ResultSetMapperFactory {
@Override
public ResultSetMapper mapperFor(Class type, StatementContext ctx) {
if (type == SomeBean.class) {
return new BeanMapper(type);
}
// ..
}
}
请注意,在这种情况下,您不需要使用 @MapResultAsBean
注释。
关于java - jdbi:将@MapResultAsBean 注释与 CustomMapperFactory 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49298917/
我可以使用 @MapResultAsBean 注释将 jdbi 查询的结果映射到我感兴趣的 bean,如下所示: @SqlQuery("select * from some_table where i
我是一名优秀的程序员,十分优秀!