Java jdbi:将@MapResultAsBean注释与CustomMapperFactory一起使用
我可以使用Java jdbi:将@MapResultAsBean注释与CustomMapperFactory一起使用,java,postgresql,orm,dropwizard,jdbi,Java,Postgresql,Orm,Dropwizard,Jdbi,我可以使用@MapResultsBean注释将jdbi查询的结果映射到我感兴趣的bean,如下所示: @SqlQuery("select * from some_table where id = :some_id") @MapResultAsBean SomeBean findById(@Bind("some_id") String someId); class CustomMapperFactory implements ResultSetMapperFactory { // Ove
@MapResultsBean
注释将jdbi查询的结果映射到我感兴趣的bean,如下所示:
@SqlQuery("select * from some_table where id = :some_id")
@MapResultAsBean
SomeBean findById(@Bind("some_id") String someId);
class CustomMapperFactory implements ResultSetMapperFactory {
// Override methods to provide custom conversion logic
}
final DBIFactory factory = new DBIFactory();
final DBI jdbi = factory.build(environment, conf.getDatabase(), "postgresql");
jdbi.registerMapper(new CustomMapperFactory());
如果应用程序中使用的jdbi
实例尚未向任何自定义映射器注册,则此方法可以正常工作
但我正在处理的应用程序有一个自定义映射器,如下所示:
@SqlQuery("select * from some_table where id = :some_id")
@MapResultAsBean
SomeBean findById(@Bind("some_id") String someId);
class CustomMapperFactory implements ResultSetMapperFactory {
// Override methods to provide custom conversion logic
}
final DBIFactory factory = new DBIFactory();
final DBI jdbi = factory.build(environment, conf.getDatabase(), "postgresql");
jdbi.registerMapper(new CustomMapperFactory());
此映射器在应用程序开始时注册到jdbi
实例,如下所示:
@SqlQuery("select * from some_table where id = :some_id")
@MapResultAsBean
SomeBean findById(@Bind("some_id") String someId);
class CustomMapperFactory implements ResultSetMapperFactory {
// Override methods to provide custom conversion logic
}
final DBIFactory factory = new DBIFactory();
final DBI jdbi = factory.build(environment, conf.getDatabase(), "postgresql");
jdbi.registerMapper(new CustomMapperFactory());
CustomMapperFactory
覆盖方法,并提供将任何类型的结果从数据库转换为相关bean类型的逻辑。正是这一个uber转换器负责整个应用程序中的所有DB到POJO转换
我的问题是:
有没有一种方法可以让jdbi
继续使用这个CustomMapperFactory
将结果从数据库转换为除类型SomeBean
之外的所有类型的bean
我尝试添加@mapsresultasbean
使CustomMapperFactory
仍在jdbi
注册。程序运行,但注册到jdbi
的自定义映射器优先,而@mapsresultasbean
完全没有效果,只是被忽略了
在互联网上找不到太多关于它的信息。有什么帮助吗?我们使用
dropwizard-jdbi-1.2.2
和postgres
数据库。您可以通过以下几种方式来实现:
a。告诉JDBI您的CustomMapperFactory
没有映射类型SomeBean
。这样,JDBI将退回到使用@MapResultAsBean
:
public class CustomResultMapperFactory implements ResultSetMapperFactory {
@Override
public boolean accepts(Class type, StatementContext ctx) {
if (type == SomeBean.class) {
return false;
}
//....
}
}
或
b。为SomeBean
类型显式返回BeanMapper
:
public class CustomResultMapperFactory implements ResultSetMapperFactory {
@Override
public ResultSetMapper mapperFor(Class type, StatementContext ctx) {
if (type == SomeBean.class) {
return new BeanMapper(type);
}
// ..
}
}
注意,在本例中,您不需要有@mapsresultasbean
注释