我只是对一个复杂的系统进行基准测试,发现通过 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/