Han*_*s Z 4 java mysql sql jdbi
我一直在将现有项目从 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
);
Run Code Online (Sandbox Code Playgroud)
JDBI 不太适合构建动态查询。IMO 这个库的重点是尽可能地分离代码和 SQL 查询。
但是,您的特定情况可能会通过 SQL 解决:
COALESCE(:foo, foo)
Run Code Online (Sandbox Code Playgroud)
如果 'foo' 是表中列的名称,并且 :foo 将解析为 NULL,那么 mysql SET 将有效
SET foo=foo
Run Code Online (Sandbox Code Playgroud)
即它什么都不做(在您的情况下这是理想的行为)。如果 :foo 不为空,则等价于
SET foo=:foo
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4451 次 |
| 最近记录: |