Pergunta

Eu estou usando SimpleJdbcTemplate e MapSqlParameterSource no caminho folowing:

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

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

Quando typeId (que é um Long) é null, em seguida, os olhares de consulta da seguinte maneira:

SELECT id FROM XXX WHERE typeId = null

enquanto eu esperaria que para gerar

SELECT id FROM XXX WHERE typeId IS NULL

Eu informou esta questão ea resposta foi que

Você terá que fornecer a instrução SQL apropriada com base em seus parâmetros de consulta.

e, como consequência meu código está cheio de verificações nulos.

Existe uma maneira mais elegante de lidar com parâmetros nulos enviados para o SimpleJdbcTemplate?

Foi útil?

Solução

Eles têm um ponto -. JdbcTemplate não é um interpretador de SQL, ele só substitui os espaços reservados

Eu sugiro que você construir sua cláusula com um método de utilitário, e concat-lo para a string de consulta:

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);

Não é muito bonita. Alternativamente, talvez você pode configurar o MySQL para permitir "= NULL", mas eu não acho que isso é uma opção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top