java – 如何使用JDBI的Sql Object API在运行时创建动态Sql查询?
作者:互联网
我一直在将现有项目从jdbc转移到jdbi,而且我一直在使用jdbi的漂亮SQL Object API.我们正在使用mysql.
虽然SQL Object API可以构造在编译时已知的已处理查询,但我找不到在运行时生成查询的方法.
具体来说,我希望能够做到这样的事情:
@SqlUpdate(
"UPDATE record SET "+
@IfNotZero("foo") "foo=:foo" +
@IfNotNull("bar") "bar=:bar" +
@IfNotNull("baz") "baz=:baz" +
"WHERE id=:id"
)
public abstract int updateRecord(
@Bind("id") int id,
@Bind("foo") int foo,
@Bind("bar") String bar,
@Bind("baz") String baz
);
解决方法:
JDBI不太适合构建动态查询. IMO这个库的重点是尽可能地分离代码和SQL查询.
但是,您的特定情况可能通过SQL解决:
COALESCE(:foo, foo)
如果’foo’是表中列的名称,并且:foo将解析为NULL,那么mysql SET将是有效的
SET foo=foo
即它什么都不做(在你的情况下,这是不可取的).如果:foo不为null,它将等效于
SET foo=:foo
标签:java,sql,mysql,jdbi 来源: https://codeday.me/bug/20190725/1533233.html