5

Spring 框架有两个相似的类:JdbcTemplate 是旧的 Java 1.4 类,而 SimpleJdbcTemplate 是较新的,具有更好的方法。

JdbcTemplate 有一个方法setQueryTimeout,它基本上让我可以访问在底层 Statement 对象上具有相同名称的方法。

有没有办法用SimpleJdbcTemplate做类似的事情?

解决方案:根据 skaffman 的回答,我SimpleJdbcTemplate自己从 a 创建对象JdbcTemplate,所以现在我可以做任何我想做的事情。代码:

JdbcTemplate jdbcTemplate = this.getJdbcTemplate();
jdbcTemplate.setQueryTimeout(30);
SimpleJdbcTemplate simpleJdbcTemplate = new SimpleJdbcTemplate(jdbcTemplate);

有点拗口,但完成了工作。

更新:这确实比必要的复杂。看答案。

4

1 回答 1

5

SimpleJdbcTemplate 不是 的替代品JdbcTemplate,它只是一个对 java5 友好的补充,用于某些可以充分利用可变参数和泛型的操作。

如果您查看 的源代码SimpleJdbcTemplate,您会发现它将所有工作委托给一个JdbcTemplate对象,因此通过将超时(或其他选项)设置为JdbcTemplate,您也可以将它们隐式设置为SimpleJdbcTemplate

如果您正在获得SimpleJdbcTemplatevia SimpleJdbcDaoSupport.getSimpleJdbcTemplate(),那么JdbcTemplate将已经正确连接。

编辑:

例如:

public class MyDao extends SimpleJdbcDaoSupport {
    public void doStuff() {
        getJdbcTemplate().setQueryTimeout(x);
        getSimpleJdbcTemplate().execute(...);
    }
}

SimpleJdbcTemplate 包含与 getJdbcTemplate() 检索到的相同的 JdbcTemplate。

如果你不扩展 SimpleJdbcDaoSupport,那么是的,你需要自己手动构造一个 SimpleJdbcTemplate。

于 2009-07-30T12:31:47.333 回答