11

SimpleJdbcTemplateとMapSqlParameterSourceを次のように使用しています。

MapSqlParameterSource parameterSource = new MapSqlParameterSource();
parameterSource.addValue("typeId", typeId, Types.BIGINT);

List<Long> ids = _jdbcTemplate.query(_selectIdByParameters, new EntityIdRowMapper(), parameterSource);

typeId(はLong)の場合null、クエリは次のようになります。

SELECT id FROM XXX WHERE typeId = null

私はそれが生成することを期待しますが

SELECT id FROM XXX WHERE typeId IS NULL

私はこの問題を報告しました、そして、応答はそれでした

クエリパラメータに基づいて適切なSQLステートメントを提供する必要があります。

その結果、私のコードにはnullチェックが散らばっています。

に送信されたnullパラメータを処理するより洗練された方法はありますSimpleJdbcTemplateか?

4

1 に答える 1

7

彼らにはポイントがあります-JdbcTemplateはSQLインタープリターではなく、プレースホルダーを置き換えるだけです。

ユーティリティ メソッドを使用して句を作成し、それをクエリ文字列に連結することをお勧めします。

String createNullCheckedClause(String column, Object value) {
   String operator = (value == null ? "is" : "=");
   return String.format("(%s %s ?)", column, operator);
}

...

String query = "select * from table where " + createNullCheckedClause("col", x);

あまりきれいではありません。または、「= NULL」を許可するように MySQL を構成することもできますが、それは選択肢ではないと思います。

于 2009-07-21T09:47:23.137 に答える