如何使用BindBeans将字符串列表输入到sql

时间:2016-08-02 17:31:47

标签: java sql dropwizard jdbi

由于某些原因,我不能使用BindIn,但必须使用BindBeans传入in子句的字符串值列表。我在下面,但似乎无法按照我的要求传递类型。有什么建议吗?

*MyFilter {
private final String Types; 
private final Timestamp Date;
 public MyFilter (){
    this.Types = "A','B"
    THIS.Date = now();
 }

}
@SqlQuery("select * from table where type in (:Types) and date = :Date  ")
public abstract List<xx> get(@BindBean MyFilter filter);*

2 个答案:

答案 0 :(得分:1)

您应该可以使用@BindIn:

执行此操作
@SqlQuery("select * from table where type in (<types>) and date = :Date")
public abstract List<xx> get(@BindIn List<String> filter);

要使@BindIn生效,您还需要将@UseStringTemplate3StatementLocator添加到您的访问类。 JDBI需要这个

您可能还需要添加此依赖项:

<dependency>
    <groupId>org.antlr</groupId>
    <artifactId>stringtemplate</artifactId>
    <version>3.2.1</version>
</dependency>

这是一个有点相关的帖子:

https://stackoverflow.com/a/19200912/2108024

答案 1 :(得分:0)

如果你想要一些SQL的动态部分,你可以使用stringtemplates。

@UseStringTemplate3StatementLocator
public abstract class MyDAO {

    @SqlQuery("select * from table where type in (<types>) and date = :Date  ")
    public abstract List<xx> get(@Define("types") String types);

....

您需要添加此依赖项:

 <dependency>
       <groupId>org.antlr</groupId>
       <artifactId>stringtemplate</artifactId>
       <version>3.2</version>
 </dependency>

就我而言,它对动态排序非常有用。希望这会有所帮助。