Ibterの生成されたExampleクラスを使用して、いくつかの条件でSELECT
を実行します。Ibatis/Ibator - ExampleクラスとCriteriaを使って "複雑な" WHERE句を正しく書く方法
としては、複数のOR
とAND
事業者とWHERE
句を構成するcriteria.andFieldIsSomething()
とexample.or(example)
を使用するためにかなり簡単です、here in the usage notesを説明しました。
example.createCriteria().andIntegerIsEqualTo(int).andDateIsEqualTo(someday);
example.or(example.createCriteria().andIntegerIsNull().andDateIsEqualTo(someday));
example.or(example.createCriteria().andIntegerIsEqualTo(int).andDateIsNull());
example.or(example.createCriteria().andIntegerIsNull().andDateIsNull());
をしかし、最初に、それは一種の退屈で冗長だし、それだろう出力次のコード:
私はこれを書くことができ
SELECT * FROM zeTable
WHERE (integer = int AND date = someday)
OR (integer IS NULL AND date = someday)
OR (integer = int AND date IS NULL)
OR (integer IS NULL AND date IS NULL);
よりエレガント(そしておそらく効率的な)だろう書き込みの方法:
SELECT * FROM zeTable
WHERE (integer IS NULL OR integer = int)
AND (date IS NULL OR date = someday);
NULL
のためのテストは、私はfを防ぎますROMには.andFieldSomethingIn(List values)
メソッドを効率的に使用していますが、この例を単純にしておきながら、書くべきコードは5つまたは6つのフィールドを横切ることを暗示しています。
これは私にはばかげているので、もっと良い方法があるはずです。誰かが何か提案することはできますか