2016-08-02 49 views
0

由于某些原因,我无法使用BindIn,但必须使用BindBeans为in子句传递字符串值列表。我有下面,但似乎无法通过类型,因为我想。有任何建议吗?如何使用BindBeans将字符串列表输入到sql

*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);* 

回答

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

+0

谢谢,之前提到,我不能使用BindIn,因为我需要将所有参数放在一个bean中。所以必须使用BindBean。任何建议? – chloes

+0

我不相信有可能以这种方式使用BindBean。我认为你需要以某种方式使用BindIn - 通过获取java层的列表,或让MyFilter实现迭代(这将允许你在BindIn中使用它) – Sperr

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> 

对我来说,它是动态的排序是非常有用的。首页这有助于。

相关问题