【问题标题】:jdbi: Use @MapResultAsBean annotation together with CustomMapperFactoryjdbi:将@MapResultAsBean 注解与 CustomMapperFactory 一起使用
【发布时间】:2018-03-15 11:59:10
【问题描述】:

我可以使用 @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 类型的逻辑。正是这个超级转换器负责整个应用程序中所有 DB 到 POJO 的转换。

我的问题是: 有没有办法让jdbi 继续使用CustomMapperFactory 将结果从数据库转换为除SomeBean 类型之外的所有类型的bean。

我尝试添加@MapResultAsBean,而CustomMapperFactory 仍向jdbi 注册。程序运行,但注册到jdbi 的自定义映射器优先,@MapResultAsBean 完全没有效果,只是被忽略了。

在互联网上找不到太多关于它的信息。有什么帮助吗?我们使用dropwizard-jdbi-1.2.2 显然是postgres 数据库。

【问题讨论】:

    标签: java postgresql orm dropwizard jdbi


    【解决方案1】:

    您可以通过以下几种方式做到这一点:

    一个。告诉 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);
            }
            // ..
        }
    }
    

    请注意,在这种情况下,您不需要 @MapResultAsBean 注释。

    【讨论】:

      猜你喜欢
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      • 2014-01-14
      • 2015-10-24
      • 1970-01-01
      • 2013-05-22
      • 2016-07-01
      • 1970-01-01
      相关资源
      最近更新 更多