2016-08-02 7 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でこれを行うことができる必要があります:@BindInについては

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

が動作するように、また、あなたのアクセスクラスに@UseStringTemplate3StatementLocatorを追加する必要があります。 JDBIあなたはおそらくも、この依存関係を追加する必要があります

にこれを必要とします。

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

ここで多少の関連記事です:

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

+0

私はすべてのパラメータを1つのbeanに入れる必要があるため、BindInを使用することはできません。 BindBeanを使用する必要があります。なにか提案を ? – chloes

+0

この方法でBindBeanを使用することはできません。私はあなたが何らかの方法でBindInを使用する必要があると思う - Java層のリストを取得するか、またはMyFilterがBindInで使用できるようにiterableを実装することによって、 – 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> 

私の場合、それはダイナミックソートのために非常に有用でした。ホームこれは役立ちます。

関連する問題