我以简单的方式使用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);
原文地址:https://www.jb51.cc/java/126232.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。