java - 与普通的PreparedStatement相比,使用Spring jdbcTemplate对性能造成的影响

标签 java oracle spring jdbctemplate

我只是对一个复杂的系统进行基准测试,发现通过 Spring 的查询非常慢。

增加了约 600 毫秒。

基准代码比较以下内容:

case TEMPLATE:
{
    t = System.currentTimeMillis();
    jdbcTemplate.update(getUnnamedPreparedStatement(query), new PreparedStatementSetter() {

        @Override
        public void setValues(PreparedStatement ps) throws SQLException {
            int i = 1;
            for (Object o : queryParameters) {
                ps.setObject(i++, o);
            }
        }
    });
    break;
}

case PREPAREDSTATEMENT:
{
    Connection c = dataSource.getConnection();
    t = System.currentTimeMillis();
    PreparedStatement ps = c.prepareStatement(getUnnamedPreparedStatement(query));
    int index = 1;
    for (Object parameter: queryParameters) {
        ps.setObject(index++, parameter);
    }
    ResultSet rs = ps.executeQuery();
    rs.next();
    break;
}

两个查询给出相同的结果,并且顺序并不重要。 此外,它不依赖于查询类型(即 SELECT、UPDATE)。

我已经测试了十几次,结果很稳定。

Spring jdbcTemplate 能做什么,PreparedStatement 不能做什么?

最佳答案

由于我上面的评论似乎是正确的答案,因此我会将其发布为 future 咨询的答案。

@Felix,重用连接与 spring 无关,但与你的连接池(如果有的话)有关。因此应该考虑到这一点。

所以基本上我认为 spring 项目中缺少连接池。

关于java - 与普通的PreparedStatement相比,使用Spring jdbcTemplate对性能造成的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9614881/

相关文章:

java - Play Framework 调用 Controller 导致打开文件过多错误

spring - 为什么Springboot的JPA实体是抽象的?

java - 计算交点数值不准确

java - 如何让 Rest Assured 在我的 REST 响应中返回文本(非加密或流式传输)值?

java - JAXB 解码排除特定元素

sql - Oracle 中的物化 View 与临时表

c# - System.Data.OracleClient 与。 ODP.NET

c# - 比较 Oracle Date 与 C# DateTime

java - Spring Framework 与 JVM 相互连接

java - 如何使用两个泛型获取参数化类型的类实例