質問

私はfolowing方法でSimpleJdbcTemplateとMapSqlParameterSourceを使用しています:

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

List<Long> ids = _jdbcTemplate.query(_selectIdByParameters, new EntityIdRowMapper(), parameterSource);
typeIdです)Longnullある場合は、

、その後、クエリは次のようになります。

SELECT id FROM XXX WHERE typeId = null

私はそれが生成することを期待するのに対し、

SELECT id FROM XXX WHERE typeId IS NULL

私はこの問題を報告してきたし、応答が

ということでした
  

あなたはあなたのクエリパラメータに基づいて、適切なSQL文を提供する必要があります。

、結果として、私のコードはヌルチェックが散らばっている。

SimpleJdbcTemplateに送信されたヌルパラメータを処理するよりエレガントな方法はありますか?

役に立ちましたか?

解決

彼らはポイントを持っている - JdbcTemplateがSQLインタプリタではない、それはちょうどあなたのプレースホルダを置き換えます。

私はあなたがユーティリティメソッドを使用して句を構築し、クエリ文字列にそれをCONCAT提案します:

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を設定することができますが、私はそれはオプションだとは思わない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top