我需要在一个数据库中执行一次查询操作,这个操作我会经常使用。使用普通语句时,它完全正常:
List<Invoice> l = this.jdbcTemplate.query(
"SELECT id, name, stuff FROM example WHERE amount > ?",
new Object[] { "100" }, new RowMapper<Invoice>() {...} );
我经常执行上述语句,为了提高性能,我希望使用预处理语句。但是,我现在不确定如何正确地使用Spring API来实现这一点。
我很困惑为什么Spring要求我在查询时传递一个PreparedStatementCreator实例作为参数?我认为这正是我不需要每次使用查询方法都创建新的预处理语句的关键所在。因此,以下代码片段将完全没有意义,因为每次调用
query
方法时都会创建新的预处理语句: List<Invoice> l = this.jdbcTemplate.query(
new PreparedStatementCreator() {
String query = "SELECT id, name, stuff FROM example WHERE amount > ?";
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
return connection.prepareStatement(query);
}
},
new PreparedStatementSetter() {...},
new RowMapper<Invoice>() {...} );
我需要创建自己的ReusablePreparedStatementCreator
吗?这将只在第一次调用createPreparedStatement
时创建一个新方法。
PreparedStatementCreatorFactory
可以帮助我吗?
换句话说,如何正确地创建一个使用准备好的语句的选择查询,在Spring JDBCTemplate中获得性能优势,同时不失去RowMapper的优势?
PreparedStatement
,所以不需要让它变得更加复杂。 - M. Deinumquery
方法时使用的内部类。是否获取新语句取决于您的 JDBC 驱动程序以及它是否缓存语句。 - M. DeinumPreparedStatement
,因为您将如何为下一个连接执行它?(基本上每个事务都在自己的连接上运行)。 - M. Deinum