由于某些原因,我不能使用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);*
答案 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>
这是一个有点相关的帖子:
答案 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>
就我而言,它对动态排序非常有用。希望这会有所帮助。