簡體   English   中英

NamedParameterJdbcTemplate 與 JdbcTemplate

[英]NamedParameterJdbcTemplate vs JdbcTemplate

我是 Spring3.x 的初學者,我正在學習 Spring DAO 支持。 我想知道NamedParameterJdbcTemplateJdbcTemplate之間的區別。 就性能而言,哪一個是最好的。 以及何時使用NamedParameterJdbcTemplate以及何時使用JdbcTemplate

當您使用 JdbcTemplate 時,您給它的 SQL 帶有? 要替換到 SQL 中的每個參數的占位符。 當您在代碼中分配參數時,您必須在數組中傳遞參數,並按照它們在數組中出現的順序使用它們,如下所示:

Object[] args = new Object[] {"x", "y"};
String sql = "select * from foo where a = ? and b = ?";
jdbcTemplate.query(sql, args, resultSetExtractor);

所以運行的 SQL 是select * from foo where a = 'x' and b = 'y'

NamedParameterJdbcTemplate 允許您為參數占位符分配名稱並傳入地圖,以便模板可以將地圖名稱與占位符匹配。 所以你的代碼看起來像:

String sql = "select * from foo where a = :mya and b = :myb";
Map<String, Object> argMap = new HashMap<String, Object>();
argMap.put("mya", "x");
argMap.put("myb", "y");
namedParameterJdbcTemplate.query(sql, argMap, resultSetExtractor);

生成與第一個示例相同的 SQL。

運行查詢是耗時的部分,參數插入的性能不是問題。

這個想法是通過名稱匹配參數比必須以特定順序指定它們更不容易出錯。 在我處理過的實際應用程序中,通常我們將 SQL 存儲在與 DAO 代碼不同的文件中,並且很容易意外地以錯誤的順序獲取參數。

沒有可測量的性能差異。 NamedParameterJdbcTemplate 是一種方便,允許您使用命名參數。 如果您真的很好奇,請查看可隨時下載的源代碼。 我發現閱讀源代碼讓我對在論壇上得到的答案更有信心。

暫無
暫無

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

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