作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
JdbcTemplate 中的 queryforInt/queryforLong 方法在 Spring 3.2 中已弃用。我不知道为什么或什么被认为是使用这些方法替换现有代码的最佳做法。
一个典型的方法:
int rowCount = jscoreJdbcTemplate.queryForInt(
"SELECT count(*) FROM _player WHERE nameKey = ? AND teamClub = ?",
playerNameKey.toUpperCase(),
teamNameKey.toUpperCase()
);
好的,上面的方法需要改写如下:
Object[] params = new Object[] {
playerNameKey.toUpperCase(),
teamNameKey.toUpperCase()
};
int rowCount = jscoreJdbcTemplate.queryForObject(
"SELECT count(*) FROM _player WHERE nameKey = ? AND teamClub = ?",
params, Integer.class);
显然,这种弃用使 JdbcTemplate 类更简单(或者是吗?)。 QueryForInt 一直是一种方便的方法(我猜)并且已经存在了很长时间。为什么被删除了。结果代码变得更加复杂。
最佳答案
我认为是有人意识到 queryForInt/Long 方法具有令人困惑的语义,也就是说,从 JdbcTemplate 源代码中您可以看到它当前的实现:
@Deprecated
public int queryForInt(String sql, Object... args) throws DataAccessException {
Number number = queryForObject(sql, args, Integer.class);
return (number != null ? number.intValue() : 0);
}
这可能会导致您认为如果结果集为空,它将返回 0,但是它会引发异常:
org.springframework.dao.EmptyResultDataAccessException: 结果大小不正确:预期为 1,实际为 0
所以下面的实现基本上等同于当前的实现:
@Deprecated
public int queryForInt(String sql, Object... args) throws DataAccessException {
return queryForObject(sql, args, Integer.class);
}
然后现在必须用丑陋的代码替换非弃用代码:
queryForObject(sql, new Object { arg1, arg2, ...}, Integer.class);
或者这个(更好):
queryForObject(sql, Integer.class, arg1, arg2, ...);
关于java - JdbcTemplate queryForInt/Long 在 Spring 3.2.2 中被弃用。应该用什么代替?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15661313/
我是一名优秀的程序员,十分优秀!