使用Spring中的jdbcTemplate 时,通过id查询不到结果时返回Incorrect result size: expected 1, actual 0
@Override
public <T> T queryForObject(String sql, RowMapper<T> rowMapper, Object... args) throws DataAccessException {
List<T> results = query(sql, args, new RowMapperResultSetExtractor<T>(rowMapper, 1));
return DataAccessUtils.requiredSingleResult(results);
}
DataAccessUtils.requiredSingleResult(results);这个方法
public static <T> T requiredSingleResult(Collection<T> results) throws IncorrectResultSizeDataAccessException {
int size = (results != null ? results.size() : 0);
if (size == 0) {
throw new EmptyResultDataAccessException(1);
}
if (results.size() > 1) {
throw new IncorrectResultSizeDataAccessException(1, size);
}
return results.iterator().next();
}
结果返回0和大于一个都会抛出异常,我们使用这个方法是期望返回一个对象的,但是可能返回0,我们需要的是null而不是异常,可以使用DataAccessUtils.uniqueResult(query);方法
/ **
* 查询单个对象
* @param id
* @return
*/
public User findUserById(Integer id) {
String sql = "select * from tuser where id = ?";
List<User> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class), id);
return DataAccessUtils.uniqueResult(query);
}
queryForMap使用如下方法
public Map<String, Object> findUserMap(Integer id) {
String sql = "select * from tuser where id = ?";
Object[] args = new Object[]{id};
List<Map<String, Object>> results =
jdbcTemplate.query(sql, args, new RowMapperResultSetExtractor<Map<String, Object>>(new ColumnMapRowMapper(), 1));
return DataAccessUtils.uniqueResult(results);
}
java学习交流群:513650703
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)