使用 Spring JDBC 進行數據庫操作:深入解析 JdbcTemplate

目錄

1. Spring JDBC 簡介

2. JdbcTemplate 介紹

3. 創建數據庫和表

4. 配置 Spring JDBC

5. 創建實體類

6. 使用 JdbcTemplate 實現增、刪、改、查操作

7. Spring JDBC 優點

8. 小結


1. Spring JDBC 簡介

????????Spring JDBC 是 Spring 框架中的一個模塊,旨在簡化數據庫訪問操作。它通過封裝底層的 JDBC API,減少了繁瑣的代碼,提高了開發效率。傳統的 JDBC 編程要求開發人員手動處理數據庫連接、SQL 執行、錯誤處理以及資源釋放等。而 Spring JDBC 通過提供 JdbcTemplate 類以及其他輔助工具,屏蔽了這些底層細節,使得數據庫操作更加簡單、直觀且易于維護。

2. JdbcTemplate 介紹

JdbcTemplate 是 Spring 框架中用于簡化 JDBC 操作的核心類,它對傳統的 JDBC API 做了封裝,提供了豐富的方法,方便開發人員進行數據庫操作。主要的操作包括執行增、刪、改、查等操作。

常用的 JdbcTemplate 方法類型
  1. execute 方法execute 方法可以用于執行任何 SQL 語句,一般用于執行 DDL(Data Definition Language)語句,比如創建表、刪除表等。

    jdbcTemplate.execute("CREATE TABLE user (...);");
    
  2. update 和 batchUpdate 方法

    • update 用于執行新增、修改、刪除等語句。
    • batchUpdate 用于批量執行 SQL 操作,可以顯著提高效率。
    jdbcTemplate.update("INSERT INTO user (username, address) VALUES (?, ?)", "李連杰", "上海");
    
  3. query 和 queryForXXX 方法

    • query 用于查詢返回多個結果的 SQL 語句。
    • queryForObjectqueryForList 等方法用于查詢單個對象或列表。
    List<User> users = jdbcTemplate.query("SELECT * FROM user", new BeanPropertyRowMapper<>(User.class));
    
  4. call 方法call 方法用于執行數據庫的存儲過程或函數。

    jdbcTemplate.call("{CALL some_procedure(?)}", params);
    

3. 創建數據庫和表

首先,我們需要在 MySQL 數據庫中創建一個示例數據庫,并在其中創建一個簡單的用戶表 user

CREATE DATABASE mybatis_demo;USE mybatis_demo;CREATE TABLE `user` (`id` INT(11) NOT NULL AUTO_INCREMENT,`username` VARCHAR(32) NOT NULL COMMENT '用戶名稱',`birthday` DATETIME DEFAULT NULL COMMENT '生日',`sex` CHAR(1) DEFAULT NULL COMMENT '性別',`address` VARCHAR(256) DEFAULT NULL COMMENT '地址',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- 插入一些示例數據
INSERT INTO `user` (`id`, `username`, `birthday`, `sex`, `address`) VALUES
(1, '老王', '2018-02-27 17:47:08', '男', '北京'),
(2, '熊大', '2018-03-02 15:09:37', '女', '上海'),
(3, '熊二', '2018-03-04 11:34:34', '女', '深圳'),
(4, '光頭強', '2018-03-04 12:04:06', '男', '廣州');

4. 配置 Spring JDBC

接下來,我們在 Spring 配置文件中添加數據庫連接池和 JdbcTemplate 配置:

applicationContext.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 配置連接池 DriverManagerDataSource --><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis_demo"/><property name="username" value="root"/><property name="password" value="2020"/></bean><!-- 配置 JdbcTemplate --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"/></bean>
</beans>

5. 創建實體類

在 Java 中,我們需要為 user 表創建一個實體類 User,該類的屬性應與數據庫表的列對應:

public class User {private Integer id;private String username;private Date birthday;private String sex;private String address;// getters and setters
}

6. 使用 JdbcTemplate 實現增、刪、改、查操作

插入數據
@Test
public void testInsert() {String sql = "INSERT INTO user (username, address) VALUES (?, ?)";jdbcTemplate.update(sql, "李連杰", "上海");
}
更新數據
@Test
public void testUpdate() {String sql = "UPDATE user SET username = ?, address = ? WHERE id = ?";int result = jdbcTemplate.update(sql, "穩杰", "南海", 2);System.out.println("更新的記錄數: " + result);
}
刪除數據
@Test
public void testDelete() {String sql = "DELETE FROM user WHERE id = ?";int result = jdbcTemplate.update(sql, 18);System.out.println("刪除的記錄數: " + result);
}
查詢數據(單表查詢)
@Test
public void testQueryList() {String sql = "SELECT * FROM user WHERE address LIKE '%京%'";List<User> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));System.out.println("查詢結果:");for (User user : users) {System.out.println(user);}
}
查詢單個對象
@Test
public void testQueryForObject() {String sql = "SELECT * FROM user WHERE id = ?";User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), 1);System.out.println(user);
}

7. Spring JDBC 優點

  • 簡化數據庫操作JdbcTemplate 封裝了 JDBC 操作,減少了開發人員手動處理數據庫連接、異常捕獲、資源釋放等的工作。
  • 降低代碼冗余:對于同類型的操作(如執行增刪改查),不再需要寫重復的代碼,減少了開發工作量。
  • 支持事務管理:Spring JDBC 與 Spring 的事務管理無縫集成,能有效管理數據庫事務。
  • 靈活性高:盡管 Spring JDBC 封裝了很多常見操作,但它并沒有限制開發人員的操作,開發者可以使用原生 SQL 執行任何復雜的數據庫操作。

8. 小結

????????通過使用 Spring JDBC 和 JdbcTemplate,我們可以大大簡化數據庫操作。Spring JDBC 提供了高效的資源管理、異常處理、SQL 執行等能力,使得開發人員能夠更加專注于業務邏輯的實現,而不必糾結于底層的數據庫操作細節。結合 Spring 的事務管理機制,可以保證數據庫操作的可靠性和一致性。

????????Spring JDBC 的強大功能,使其在許多中小型項目中成為數據庫操作的首選方案,尤其是在不需要 ORM(如 Hibernate)框架的情況下,Spring JDBC 提供了簡潔而高效的數據庫訪問方式。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/894385.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894385.shtml
英文地址,請注明出處:http://en.pswp.cn/news/894385.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

BUUCTF [Black Watch 入群題]PWN1 題解

1.下載文件 exeinfo checksec 32位 IDA32 看到關鍵函數 read兩次 第一次read的變量s在bss段&#xff1b;第二次的buf到ebp距離為 24 但是第二次的read字節只能剛好填滿返回地址 傳不進去變量 所以想到棧遷移 將棧移動到變量s所在位置上來 同時 這題開了NX 無直接的binsh和s…

CentOS 上安裝 Go (Golang)

1. 檢查系統環境 確保系統為 CentOS 7 或 CentOS 8&#xff0c;或者其他兼容的 Linux 發行版。 cat /etc/os-release2. 安裝依賴 安裝一些必要的工具&#xff1a; sudo yum update -y sudo yum install -y wget tar3. 下載 Go 從 Go 官方下載頁面獲取適用于 Linux 的最新版…

chrome源碼剖析—進程通信

Chrome 瀏覽器采用多進程架構&#xff08;multi-process architecture&#xff09;&#xff0c;這種架構使得每個瀏覽器標簽、擴展、插件、GPU 渲染等都在獨立的進程中運行。為了確保不同進程之間的高效通信&#xff0c;Chrome 使用 進程間通信&#xff08;IPC, Inter-Process …

Cubemx文件系統掛載多設備

cubumx版本&#xff1a;6.13.0 芯片&#xff1a;STM32F407VET6 在上一篇文章中介紹了Cubemx的FATFS和SD卡的配置&#xff0c;由于SD卡使用的是SDIO通訊&#xff0c;因此具體驅動不需要自己實現&#xff0c;Cubemx中就可以直接配置然后生成SDIO的驅動&#xff0c;并將SD卡驅動和…

java練習(2)

回文數&#xff08;題目來自力扣&#xff09; 給你一個整數 x &#xff0c;如果 x 是一個回文整數&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 回文數 是指正序&#xff08;從左向右&#xff09;和倒序&#xff08;從右向左&#xff09;讀都是一樣的整…

使用 Tauri 2 + Next.js 開發跨平臺桌面應用實踐:Singbox GUI 實踐

Singbox GUI 實踐 最近用 Tauri Next.js 做了個項目 - Singbox GUI&#xff0c;是個給 sing-box 用的圖形界面工具。支持 Windows、Linux 和 macOS。作為第一次接觸這兩個框架的新手&#xff0c;感覺收獲還蠻多的&#xff0c;今天來分享下開發過程中的一些經驗~ 為啥要做這個…

ComfyUI安裝調用DeepSeek——DeepSeek多模態之圖形模型安裝問題解決(ComfyUI-Janus-Pro)

ComfyUI 的 Janus-Pro 節點&#xff0c;一個統一的多模態理解和生成框架。 試用&#xff1a; https://huggingface.co/spaces/deepseek-ai/Janus-1.3B https://huggingface.co/spaces/deepseek-ai/Janus-Pro-7B https://huggingface.co/spaces/deepseek-ai/JanusFlow-1.3B 安裝…

索引的底層數據結構、B+樹的結構、為什么InnoDB使用B+樹而不是B樹呢

索引的底層數據結構 MySQL中常用的是Hash索引和B樹索引 Hash索引&#xff1a;基于哈希表實現的&#xff0c;查找速度非常快&#xff0c;但是由于哈希表的特性&#xff0c;不支持范圍查找和排序&#xff0c;在MySQL中支持的哈希索引是自適應的&#xff0c;不能手動創建 B樹的…

RK3568中使用QT opencv(顯示基礎圖像)

文章目錄 一、查看對應的開發環境是否有opencv的庫二、QT使用opencv一、查看對應的開發環境是否有opencv的庫 在開發板中的/usr/lib目錄下查看是否有opencv的庫: 這里使用的是正點原子的ubuntu虛擬機,在他的虛擬機里面已經安裝好了opencv的庫。 二、QT使用opencv 在QT pr…

29.Word:公司本財年的年度報告【13】

目錄 NO1.2.3.4 NO5.6.7? NO8.9.10? NO1.2.3.4 另存為F12&#xff1a;考生文件夾&#xff1a;Word.docx選中綠色標記的標題文本→樣式對話框→單擊右鍵→點擊樣式對話框→單擊右鍵→修改→所有腳本→顏色/字體/名稱→邊框&#xff1a;0.5磅、黑色、單線條&#xff1a;點…

【數據分析】案例03:當當網近30日熱銷圖書的數據采集與可視化分析(scrapy+openpyxl+matplotlib)

當當網近30日熱銷圖書的數據采集與可視化分析(scrapy+openpyxl+matplotlib) 當當網近30日熱銷書籍官網寫在前面 實驗目的:實現當當網近30日熱銷圖書的數據采集與可視化分析。 電腦系統:Windows 使用軟件:Visual Studio Code Python版本:python 3.12.4 技術需求:scrapy、…

數據庫對象

數據庫對象 數據庫對象是構成數據庫結構的基本單位&#xff0c;它們定義了數據庫存儲的數據類型、數據的組織方式以及數據之間的關系。在數據庫中&#xff0c;對象可以包括表&#xff0c;視圖&#xff0c;索引&#xff0c;觸發器&#xff0c;存儲過程&#xff0c;函數等多種類…

Super AGI 2025 ,人形機器人,芯片半導體,價值+量化投資最佳實踐

Super AGI 2025&#xff1a;人形機器人、芯片半導體與價值量化投資最佳實踐 關鍵詞&#xff1a;Super AGI、人形機器人、芯片半導體、價值投資、量化投資、技術趨勢、投資策略 摘要&#xff1a;本文探討了Super AGI、人形機器人和芯片半導體領域的發展前景&#xff0c;并結合價…

AI學習指南Ollama篇-使用Ollama構建自己的私有化知識庫

一、引言 (一)背景介紹 隨著企業對數據隱私和效率的重視,私有化知識庫的需求日益增長。私有化知識庫不僅可以保護企業數據的安全性,還能提供高效的知識管理和問答系統,提升企業內部的工作效率和創新能力。 (二)Ollama和AnythingLLM的結合 Ollama和AnythingLLM的結合…

省級-新質生產力數據(2010-2022年)-社科數據

省級-新質生產力數據&#xff08;2010-2022年&#xff09;-社科數據https://download.csdn.net/download/paofuluolijiang/90028612 https://download.csdn.net/download/paofuluolijiang/90028612 新質生產力是指在現代科技和經濟社會發展的推動下&#xff0c;由新的生產要素…

用一個例子詳細說明python單例模式

單例模式是一種設計模式&#xff0c;它確保一個類只有一個實例&#xff0c;并提供一個全局訪問點來訪問該實例。這在需要控制資源&#xff08;如數據庫連接、文件系統等&#xff09;的訪問時非常有用。 下面是一個使用Python實現單例模式的例子&#xff1a; class Singleton:…

【PyTorch】7.自動微分模塊:開啟神經網絡 “進化之門” 的魔法鑰匙

目錄 1. 梯度基本計算 2. 控制梯度計算 3. 梯度計算注意 4. 小節 個人主頁&#xff1a;Icomi 專欄地址&#xff1a;PyTorch入門 在深度學習蓬勃發展的當下&#xff0c;PyTorch 是不可或缺的工具。它作為強大的深度學習框架&#xff0c;為構建和訓練神經網絡提供了高效且靈活…

【數據分析】案例04:豆瓣電影Top250的數據分析與Web網頁可視化(numpy+pandas+matplotlib+flask)

豆瓣電影Top250的數據分析與Web網頁可視化(numpy+pandas+matplotlib+flask) 豆瓣電影Top250官網:https://movie.douban.com/top250寫在前面 實驗目的:實現豆瓣電影Top250詳情的數據分析與Web網頁可視化。電腦系統:Windows使用軟件:PyCharm、NavicatPython版本:Python 3.…

Ubuntu20.04 深度學習環境配置(持續完善)

文章目錄 常用的一些命令安裝 Anaconda創建conda虛擬環境查看虛擬環境大小 安裝顯卡驅動安裝CUDA安裝cuDNN官方倉庫安裝 cuDNN安裝 cuDNN 庫驗證 cuDNN 安裝確認 CUDA 和 cuDNN 是否匹配&#xff1a; TensorRT下載 TensorRT安裝 TensorRT 本地倉庫配置 GPG 簽名密鑰安裝 Tensor…

元宇宙與Facebook:社交互動的未來方向

隨著技術的飛速發展&#xff0c;元宇宙逐漸成為全球科技領域關注的焦點。作為一種集沉浸式體驗、虛擬空間和數字社交互動為一體的新型平臺&#xff0c;元宇宙正在重新定義人類的社交方式。而在這一變革中&#xff0c;Facebook&#xff08;現改名為Meta&#xff09;作為全球領先…