使用@BindBean

时间:2016-11-21 12:23:12

标签: java jdbi

我在这个简单的查询中使用JDBI:

@SqlQuery("SELECT id FROM myTable WHERE value = :bean.one")
int search(@BindBean("bean") MyBean bean);

public class Bean { 
  String one; 
  String two; 
  public String getTwo() { throw new IllegalStateException(); }
  // other methods omitted
}

查询中只使用one属性,所以我希望这可以正常工作。不幸的是,默认的bean映射器首先从bean中收集所有属性,然后在查询中填充它们。

我可以告诉JDBI忽略bean属性或方法,以免被调用吗?

1 个答案:

答案 0 :(得分:1)

这应该被认为是v2中的错误(或至少是剪纸) - 如果你想修复它,请report it to the team

作为一种变通方法,Query.bindFromProperties(bean)将忽略查询中不存在的属性。如果您将SQL方法重写为具体/默认方法:

interface MyDao extends GetHandle {
  default int search(MyBean bean) {
    return getHandle().createQuery(
            "SELECT id FROM myTable WHERE value = :bean.one")
        .bindFromProperties(bean)
        .mapTo(int.class)
        .first();
  }
}

这已在最新的v3 alpha中得到修复,因为它值得。