How can I execute somethings like this in jDBI ?
@SqlQuery("select id from foo where name in <list of names here>")
List<Integer> getIds(@Bind("nameList") List<String> nameList);
Table: foo(id int,name varchar)
Similar to @SelectProvider from myBatis.
Similar questions has been asked How do I create a Dynamic Sql Query at runtime using JDBI's Sql Object API?, but somehow answer is not clear to me.
With PostgreSQL, I was able to use the ANY comparison and bind the collection to an array to achieve this.
NB: ANY is not part of the ANSI SQL standard, so this creates a hard dependency on PostgreSQL.
This should work:
Don't forget to annotate class containing this method with:
annotation (beacuse under the hood JDBI uses Apache StringTemplate to do such substitutions). Also note that with this annotation, you cannot use '<' character in your SQL queries without escaping (beacause it is a special symbol used by StringTemplate).
Use @Define annotation to build dynamic queries in jDBI. Example: