4

私は既存のプロジェクトを 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
);
4

3 に答える 3

4

@Defineアノテーションと UseStringTemplate3StatementLocator の使用法を参照してください。

于 2013-10-08T13:07:09.273 に答える
0

次のようなクエリを作成できます。

UPDATE record SET
  foo = CASE WHEN :foo > 0 THEN :foo ELSE foo END
, bar = CASE WHEN :bar > 0 THEN :bar ELSE bar END
, baz = CASE WHEN :baz > 0 THEN :baz ELSE bar END
WHERE id = :id

つまり、条件に一致する場合は列を変数に設定し、そうでない場合はそれ自体に設定します (つまり、設定しないでください)。

于 2016-06-01T19:02:44.183 に答える