微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – SimpleJdbcTemplate和null参数

我以简单的方式使用SimpleJdbcTemplate和MapsqlParameterSource:
MapsqlParameterSource parameterSource = new MapsqlParameterSource();
parameterSource.addValue("typeId",typeId,Types.BIGINT);

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

当typeId(这是一个Long)为空时,查询查询方式如下:

SELECT id FROM XXX WHERE typeId = null

而我期望它产生

SELECT id FROM XXX WHERE typeId IS NULL

我有reported this issue,答复是这样的

You will have to provide the appropriate sql statement based on your query parameters.

因此我的代码散布着空白的检查.

是否有更优雅的方式处理发送给SimpleJdbcTemplate的空参数?

解决方法

他们有一点 – 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”,但我不认为这是一个选项.

原文地址:https://www.jb51.cc/java/126232.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐