MySQL 查询 jdbi 中的动态绑定 select 值

Dynamic bind select values in MySQL query jdbi

如何在 Jbdi 中编写动态 SQL 查询,就像在我的项目中客户会询问一些细节,例如 first name,last name,mobile。所以我会将这些值读入字符串,我的想法是直接将其附加到 SQL 动态查询,如

select first name,last name,mobile from customer

而另一个用户仅询问 first name 那么我的查询将更改为

select first name from customer where customer Id=12345

我正在使用 JDBI 在 Dropwizard 应用程序中为动态生成的搜索条件字符串做类似的事情。

@UseStringTemplate3StatementLocator
public interface ThingieDao {
    @SqlQuery
    @MapResultAsBean
    Iterator<Thingie> search(@Define("criteria") String criteria);
}

然后可以在 SQL 模板中使用定义的字符串 "criteria":

group ThingieDao;
search(criteria) ::= <<
  SELECT * FROM table_name WHERE <criteria>
>>

您可以使用相同的技术在 SQL、SELECT 列名称中插入任何字符串。

接口中的变量名并不重要,重要的是@Define 注释字符串。假设 Dropwizard 没有添加任何魔法,而且通常不会,我想应该可以使用普通 JDBI还有。