SimpleJdbcTemplate和null参数

时间:2009-07-21 07:59:59

标签: java spring jdbc spring-jdbc

我正在以下列方式使用SimpleJdbcTemplate和MapSqlParameterSource:

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

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

typeIdLong)为null时,查询会按以下方式查看:

SELECT id FROM XXX WHERE typeId = null

虽然我希望它能生成

SELECT id FROM XXX WHERE typeId IS NULL

reported this issue,回复就是那个

  

您必须根据查询参数提供相应的SQL语句。

因此我的代码充斥着空检查。

是否有更优雅的方法来处理发送到SimpleJdbcTemplate的空参数?

1 个答案:

答案 0 :(得分:6)

他们有一个观点 - 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);

不太漂亮。或者,也许您可​​以将MySQL配置为允许“= NULL”,但我认为这不是一个选项。