Java 可选jDBI参数

Java 可选jDBI参数,java,dropwizard,jdbi,Java,Dropwizard,Jdbi,jDBI查询是否可以有可选(空)参数?我正在尝试在数据库查询中获取可选参数。我正在与dropwizard合作 @SqlQuery("SELECT * \n" + "FROM posts \n" + "WHERE (:authorId IS NULL OR :authorId = author_id)") public List<Post> findAll(@Bind("authorId") Optional<Long> author

jDBI查询是否可以有可选(空)参数?我正在尝试在数据库查询中获取可选参数。我正在与dropwizard合作

@SqlQuery("SELECT * \n" +
          "FROM posts \n" +
          "WHERE (:authorId IS NULL OR :authorId = author_id)")
public List<Post> findAll(@Bind("authorId") Optional<Long> authorId);
这是我呼叫的资源路由:

@GET
public ArrayList<Post> getPosts(@QueryParam("authorId") Long authorId)
{
    return (ArrayList<Post>)postDao.findAll(Optional.fromNullable(authorId));
}
@GET
公共ArrayList getPosts(@QueryParam(“authorId”)长authorId)
{
return(ArrayList)postDao.findAll(可选的.fromNullable(authorId));
}
从我所读到的,这是可能的,所以我猜我遗漏了什么或者有一个明显的错误。任何帮助都将不胜感激


仅供参考-我也尝试过不使用guava Optional(dropwizard支持),只发送一个authorId作为一个空的Long。只要它不为null,它也可以工作

您需要在应用程序类上使用java8版本的
DBIFactory
。它提供Java8可选支持以及JodaLocalDateTime

Gradle dependency:(如果使用maven,将其转换为maven)

编译'io.dropwizard.modules:dropwizard-java8-jdbi:0.7.1
'

并确保在applicationon类上导入
io.dropwizard.java8.jdbi.DBIFactory
,并在运行时使用它

public void run(T configuration, Environment environment) throws Exception {
    final DBIFactory factory = new DBIFactory();
    final DBI jdbi = factory.build(environment, configuration.getDatabase(), "database");
    ...
    ...
}

你应该检查一下谢谢@zloster,我也把这个贴在那里了。谢谢,我会试试的。唯一的问题是我在整个应用程序中都使用了番石榴。只要dropwizard和JDBI与Java8完全兼容(可选),我不认为这是一个问题。然后,您可以简单地从java8解决方案复制代码,并将选项更改为Guava。请参见以下两个:我只获得
org.skife.jdbi.v2.MappingRegistry$1:没有为java.util.Optional注册映射器,可选返回值为
。您是直接使用DBIFactory还是从github复制了解决方案?如果您是手动执行的,那么还需要注册optionContainerFactory()以获取返回值。
public void run(T configuration, Environment environment) throws Exception {
    final DBIFactory factory = new DBIFactory();
    final DBI jdbi = factory.build(environment, configuration.getDatabase(), "database");
    ...
    ...
}