当前位置: 首页 > 知识库问答 >
问题:

JdbcTemboard queryForInt/Long在Spring 3.2.2中已弃用。它应该替换为什么?

利永年
2023-03-14

在Spring 3.2中,JdbcTemplate中的queryforInt/queryforLong方法被弃用。我不知道为什么或者什么是使用这些方法替换现有代码的最佳实践。

典型方法:

int rowCount = jscoreJdbcTemplate.queryForInt(
    "SELECT count(*) FROM _player WHERE nameKey = ? AND teamClub = ?",
    playerNameKey.toUpperCase(),
    teamNameKey.toUpperCase()
);

OK以上方法需要重写如下:

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一直是一种方便的方法(我想),而且已经存在很长时间了。为什么要删除它。因此,代码变得更加复杂。

共有3个答案

乜清野
2023-03-14

不建议使用queryForObject(String, Class)

东门清夷
2023-03-14

我同意最初的海报所说的,不推荐使用方便方法queryForLong(sql)是一种不便。

我用Spring 3.1开发了一个应用程序,刚刚更新到最新的Spring版本(3.2.3),发现它已经被弃用了。

幸运的是,这对我来说只是一句话:

return jdbcTemplate.queryForLong(sql);  // deprecated in Spring 3.2.x

已更改为

return jdbcTemplate.queryForObject(sql, Long.class);

几个单元测试似乎表明,上述更改是有效的。

冯飞鹏
2023-03-14

我想是有人意识到queryForInt/Long方法具有令人困惑的语义学,即从JdbcTemboard源代码可以看到它的当前实现:

@Deprecated
public int queryForInt(String sql, Object... args) throws DataAccessException {
    Number number = queryForObject(sql, args, Integer.class);
    return (number != null ? number.intValue() : 0);
}

这可能会导致您认为如果结果集为空,它将返回0,但它会引发异常:

<代码>组织。springframework。道。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, ...);
 类似资料:
  • 问题内容: Spring 3.2中不推荐使用JdbcTemplate中的queryforInt / queryforLong方法。我找不到使用这些方法替换现有代码的最佳实践的理由或理由。 典型方法: 确定以上方法需要重新编写如下: 显然,这种弃用使JdbcTemplate类更简单(或者呢?)。QueryForInt一直是一种便捷的方法(我想),并且已经存在了很长时间。为什么将其删除。结果,代码变得

  • 我对有问题: 应用程序启动时会显示警告: 警告7388---[main]组织。冬眠orm。弃用:HH90000014:发现使用弃用的[org.hibernate.id.SequenceHiLoGenerator]基于序列的id生成器;使用组织。冬眠id.enhanced。相反,SequenceStyleGenerator。有关详细信息,请参阅《Hibernate域模型映射指南》 我试图找出如何用新

  • 在iOS7中,该方法: 和方法: 已弃用。如何更换 和:

  • 问题内容: 大约一周前,我已经从表格设计跃升为CSS,此后一直在阅读更多内容。昨天,我在SO上读了一篇长文章,那里的海报使花车敲响,以及它们的贬值程度。关于使用它代替有很多讨论。 我有一个刚刚完成的HTML5设计,它在Firefox和chrome中看起来很棒,但是当从其他运行Internet Explorer版本7、8和9的计算机上进行测试时,该设计绝对 会爆炸 。这 似乎 对我这个设计是什么,我

  • 似乎是在SpringLDAP 2。x、 OdmManager工具已被弃用,因为大多数类似odm的事情都可以由ldapTemplate完成,这是事实。但是OdmManager能够注入一个ConverterManager,它可以告诉您自定义类型转换的情况。对于类odm(ConverterManager)操作,使用ldapTemplate的等效方法是什么? 如果ldapTemplate中没有等效系统,应

  • 问题内容: 我正在使用apache-httpclient-4.3。我将分析一个HTTP请求,尤其是查询字符串参数,但是 我不确定这意味着什么。我应该使用某些配置API的构造函数参数(那是什么?HostConfiguration作为类不再可用)。但是在构建阶段,我直接通过url传递查询参数: 我找不到不使用不推荐使用的方法从我的 请求 对象读回参数( var1,var2 )的方法,这种方法应该很简单