我试图谷歌这个问题,但找不到:在我们期望返回0或1行时,应该使用Spring jdbcTemplate中的推荐方法。 queryForObject()将在没有返回任何行时抛出异常。 queryForList()将需要遍历列表,但这不是问题。但我很好奇是否有返回0或1行的首选/推荐方法。谢谢!
答案 0 :(得分:14)
有
DataAccessUtils.singleResult(jdbcTemplate.queryForList(...));
我认为这完全是针对这些情况而作出的。如果集合为空,则will返回null
,如果找到的元素超过1,则返回IncorrectResultSizeDataAccessException
。
答案 1 :(得分:3)
您列出的选项是唯一可用的选项。至少在Spring中有Optional
支持之前(参见this bug report):
向JdbcTemplate添加可选支持
我不时会发现自己正在处理可能返回任何一行的查询。我觉得JdbcTemplate目前没有很好地解决这种情况。目前的选择包括:
- 使用#queryForObject并捕获EmptyResultDataAccessException
- 使用#query或#queryForList并检查列表的大小
Java 8 Optionals非常适合此问题。
我个人会使用queryForList
并检查isEmpty()
,因为在catch中放置逻辑并不干净。