我已经将现有项目从 jdbc 迁移到 jdbi,并且充分利用了 jdbi 漂亮的 SQL 对象 API。我们使用的是mysql。
虽然 SQL 对象 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 不太适合构建动态查询。在我看来,这个库的重点是尽可能地将代码和 SQL 查询分开。
但是,您的特定情况可能可以通过 SQL 来解决:
COALESCE(:foo, foo)
如果 'foo' 是表中列的名称,并且 :foo 将解析为 NULL,则 mysql SET 将有效
SET foo=foo
即它不会执行任何操作(这在您的情况下是所需的行为)。如果 :foo 不为 null,则相当于
SET foo=:foo
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)