论坛首页 Java企业应用论坛

spring jdbcTemplate queryForObject设计问题

浏览 9707 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-09  
DAO
spring 2.0.5 jdbcTemplate里的实现

	public Object queryForObject(String sql, Object[] args, RowMapper rowMapper) throws DataAccessException {
		List results = (List) query(sql, args, new RowMapperResultSetExtractor(rowMapper, 1));
		return DataAccessUtils.requiredSingleResult(results);
	}


	public static Object requiredSingleResult(Collection 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();
	}


取不到数据就报EmptyResultDataAccessException而不是返回null, 这不是和spring ibatis,hibernate里同样方法的实现不一致了么?
   发表时间:2007-05-10  
我猜测是为了妥协spring2.0里新加入的simpleJdbcTemplate这个方法
	@SuppressWarnings("unchecked")
	public <T> T queryForObject(String sql, ParameterizedRowMapper<T> rm, Object... args) throws DataAccessException {
		return (T) (ObjectUtils.isEmpty(args) ?
				getJdbcOperations().queryForObject(sql, rm):
				getJdbcOperations().queryForObject(sql, args, rm));
	}

如果是Null,转成范型时候会抛出NPE错误, 这应该算一个bug, 因为简单的改一下就可以了:
		Object obj = (ObjectUtils.isEmpty(args) ? getJdbcOperations().queryForObject(sql, rm) : getJdbcOperations().queryForObject(sql, args, rm));
		return obj == null ? null : (T) obj;
		
0 请登录后投票
   发表时间:2007-05-10  
1.2.5中就有了,应该不是为了妥协这个,我觉得是人家故意加了这个约束。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics