簡體   English   中英

如何在Spring JDBCTemplate中正確使用准備好的語句?

[英]How to use a prepared statement correctly with Spring JDBCTemplate?

我必須對將經常執行的數據庫進行選擇查詢。 使用正常語句,它可以正常工作:

 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 -method時都會創建新的預處理語句:

 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的優勢?

首先,我不確定您不必每次都不重新創建預備語句會顯着提高性能,因為JDBC驅動程序/數據庫通常會緩存預備語句。

但是,如果您想使用一個准備好的語句執行多個查詢,只需使用JdbcTemplate的execute()方法之一,它就可以通過SQL查詢創建一個准備好的語句(或讓您創建它),然后執行一個使用准備好的語句作為參數。 您可以在此回調內部循環,並根據需要多次執行該語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM