SimpleJdbcTemplateとヌルパラメータ
-
18-09-2019 - |
質問
私はfolowing方法で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文を提供する必要があります。
、結果として、私のコードはヌルチェックが散らばっている。
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を設定することができますが、私はそれはオプションだとは思わない。
所属していません StackOverflow