我只是对复杂系统进行基准测试,发现通过Spring的查询非常慢。
它增加了~600ms。
基准代码比较以下内容:
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没有做什么?
答案 0 :(得分:2)
由于我上面的评论似乎是正确答案,我会将其作为未来咨询的答案发布。
@Felix,重用连接与spring无关,但如果你有连接池,则与你的连接池无关。所以应该考虑到这一点。
基本上我认为春天项目中缺少连接池。
答案 1 :(得分:0)
您的第一个案例执行更新查询,而第二个案例执行选择查询。第二个应该使用ps.executeUpdate()
与第一个类似。