Spring 的 NamedParameterJdbcTemplate(轉)

来源:http://www.cnblogs.com/Zhao-Yue/archive/2016/09/20/5888899.html
-Advertisement-
Play Games

NamedParameterJdbcTemplate類是基於JdbcTemplate類,並對它進行了封裝從而支持命名參數特性。 NamedParameterJdbcTemplate主要提供以下三類方法:execute方法、query及queryForXXX方法、update及batchUpdate方 ...


NamedParameterJdbcTemplate類是基於JdbcTemplate類,並對它進行了封裝從而支持命名參數特性。

NamedParameterJdbcTemplate主要提供以下三類方法:execute方法、query及queryForXXX方法、update及batchUpdate方法。

首先讓我們看個例子吧:

 

java代碼: Java代碼  收藏代碼
  1. @Test  
  2. public void testNamedParameterJdbcTemplate1() {  
  3. NamedParameterJdbcTemplate namedParameterJdbcTemplate = null;  
  4. //namedParameterJdbcTemplate =  
  5. //    new NamedParameterJdbcTemplate(dataSource);  
  6. namedParameterJdbcTemplate =  
  7. new NamedParameterJdbcTemplate(jdbcTemplate);  
  8.     String insertSql = "insert into test(name) values(:name)";  
  9.     String selectSql = "select * from test where name=:name";  
  10.     String deleteSql = "delete from test where name=:name";  
  11.     Map<String, Object> paramMap = new HashMap<String, Object>();  
  12.     paramMap.put("name", "name5");  
  13.     namedParameterJdbcTemplate.update(insertSql, paramMap);  
  14.     final List<Integer> result = new ArrayList<Integer>();  
  15. namedParameterJdbcTemplate.query(selectSql, paramMap,  
  16. new RowCallbackHandler() {  
  17.         @Override  
  18.         public void processRow(ResultSet rs) throws SQLException {  
  19.             result.add(rs.getInt("id"));  
  20.         }  
  21.     });  
  22. Assert.assertEquals(1, result.size());  
  23. SqlParameterSource paramSource = new MapSqlParameterSource(paramMap);  
  24. namedParameterJdbcTemplate.update(deleteSql, paramSource);  
  25. }  

 

接下來讓我們分析一下代碼吧:

1)NamedParameterJdbcTemplate初始化:可以使用DataSource或JdbcTemplate 對象作為構造器參數初始化;

2)insert into test(name) values(:name):其中“:name”就是命名參數;

3) update(insertSql, paramMap):其中paramMap是一個Map類型,包含鍵為“name”,值為“name5”的鍵值對,也就是為命名參數設值的數據;

4)query(selectSql, paramMap, new RowCallbackHandler()……):類似於JdbcTemplate中介紹的,唯一不同是需要傳入paramMap來為命名參數設值;

5)update(deleteSql, paramSource):類似於“update(insertSql, paramMap)”,但使用SqlParameterSource參數來為命名參數設值,此處使用MapSqlParameterSource實現,其就是簡單封裝java.util.Map。

 

 

NamedParameterJdbcTemplate類為命名參數設值有兩種方式:java.util.Map和SqlParameterSource:

1)java.util.Map:使用Map鍵數據來對於命名參數,而Map值數據用於設值;

2)SqlParameterSource:可以使用SqlParameterSource實現作為來實現為命名參數設值,預設有MapSqlParameterSource和BeanPropertySqlParameterSource實現;MapSqlParameterSource實現非常簡單,只是封裝了java.util.Map;而BeanPropertySqlParameterSource封裝了一個JavaBean對象,通過JavaBean對象屬性來決定命名參數的值。

 

java代碼: Java代碼  收藏代碼
  1. package cn.javass.spring.chapter7;  
  2. public class UserModel {  
  3.     private int id;  
  4.     private String myName;     
  5.     //省略getter和setter       
  6. }  

 

 

 

java代碼: Java代碼  收藏代碼
  1. @Test  
  2. public void testNamedParameterJdbcTemplate2() {  
  3.     NamedParameterJdbcTemplate namedParameterJdbcTemplate = null;  
  4.     namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate);  
  5.     UserModel model = new UserModel();  
  6.     model.setMyName("name5");  
  7.     String insertSql = "insert into test(name) values(:myName)";  
  8.     SqlParameterSource paramSource = new BeanPropertySqlParameterSource(model);  
  9.     namedParameterJdbcTemplate.update(insertSql, paramSource);  
  10. }  

 

可以看出BeanPropertySqlParameterSource使用能減少很多工作量,但命名參數必須和JavaBean屬性名稱相對應才可以。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.出現invalid signature 如果是微信web開發著工具出現的話,那麼可以用手機試試看,是不是有問題。 2.出現支付一閃而過 一般是授權問題,需要在微信支付-開發配置-測試授權目錄裡面添加授權目錄(註意是區分大小寫的,精確到Controller就行了,也就是二級目錄) 2.Redire ...
  • 使用jQuery調用WebApi有時會遇到跨域的問題,今天介紹一種可以簡單解決跨域問題的方法。 當我們跨域請求WebAPI的時候會提示以下信息: XMLHttpRequest cannot load http://localhost:9641/api/news/GetData. No 'Access ...
  • 0 Asp.Net Core 項目實戰之許可權管理系統(0) 無中生有 1 Asp.Net Core 項目實戰之許可權管理系統(1) 使用AdminLTE搭建前端 2 Asp.Net Core 項目實戰之許可權管理系統(2) 功能及實體設計 3 Asp.Net Core 項目實戰之許可權管理系統(3) 通過 ...
  • 一、Paramiko模塊 1.Paramiko安裝 Python的目錄下有個Scripts目錄,cd到這個目錄用這裡面的pip命令(如果添加的環境變數可以在cmd直接輸入命令):pip install paramiko。如果pip版本低會有提示,python -m pip install --upg ...
  • ➠更多技術乾貨請戳:聽雲博客 基本術語定義 1.系統棧(system stack)是一個記憶體區,位於進程地址空間的末端。 2.在將數據壓棧時,棧是自頂向下增長的,該記憶體區用於函數的局部變數提供記憶體。它也支持在調用函數時傳遞參數。 3.如果調用了嵌套的過程,棧會自上而下增長,並接受新的活動記錄(act ...
  • 題意:已知有n個城市,某歌手每月進行一場演唱會,共持續c個月,可連續兩個月在同一個城市。城市間的路費已給出,且已知每個城市在第k(1<=k<=c)個月舉辦演唱會的所得利潤,求最終的最大利潤。 分析:第i個月在第j個城市舉辦演唱會,最終可得最大利潤,由此可得狀態轉移方程:dp[i][j] = max( ...
  • 1.python使用對象模型來存儲數據。構造任何類型的值都是一個對象。”儘管python被當成一種面向對象的腳本的編程語言“,但你完全能夠寫出不使用任何類和實例的腳本。 python對象都擁有三個特性:(1)身份、(2)類型、(3)值、 (1)身份:每個對象都有一個唯一的身份來標識自己。可以使用內建 ...
  • 建議65:避開基本類型數組轉換列表陷阱 我們在開發中經常會使用Arrays和Collections這兩個工具類和列表之間轉換,非常方便,但也有時候會出現一些奇怪的問題,來看如下代碼: 也許你會說,這很簡單,list變數的元素數量當然是5了。但是運行後列印出來的列表數量為1。 事實上data確實是一個 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...