Spring JDBC 的開發步驟(注解方式)

Spring JDBC 的開發步驟主要包括以下關鍵環節,結合代碼示例說明如下:


1. 添加依賴

pom.xml 中引入 Spring JDBC 和數據庫驅動依賴(以 HikariCP 連接池和 MySQL 為例):

<!-- Spring JDBC -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.23</version>
</dependency><!-- 數據庫驅動 -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version>
</dependency><!-- 連接池(可選,推薦 HikariCP) -->
<dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId><version>4.0.3</version>
</dependency>

2. 配置數據源

通過 Java Config 配置數據源(推薦)或 XML。

Java Config 示例
@Configuration
public class DataSourceConfig {@Beanpublic DataSource dataSource() {HikariDataSource dataSource = new HikariDataSource();dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/testdb");dataSource.setUsername("root");dataSource.setPassword("password");dataSource.setMaximumPoolSize(10);return dataSource;}
}

3. 創建 JdbcTemplate 實例

DataSource 注入到 JdbcTemplate 中:

@Configuration
public class JdbcConfig {@Autowiredprivate DataSource dataSource;@Beanpublic JdbcTemplate jdbcTemplate() {return new JdbcTemplate(dataSource);}
}

4. 編寫 DAO 層

使用 JdbcTemplate 執行 SQL 操作,常用方法包括:

  • update(): 執行增刪改操作
  • query(): 查詢數據(配合 RowMapperResultSetExtractor
  • queryForObject(): 查詢單條記錄
示例:UserDao
@Repository
public class UserDao {@Autowiredprivate JdbcTemplate jdbcTemplate;// 插入用戶public void insertUser(User user) {String sql = "INSERT INTO users (name, email) VALUES (?, ?)";jdbcTemplate.update(sql, user.getName(), user.getEmail());}// 查詢所有用戶public List<User> findAllUsers() {String sql = "SELECT * FROM users";return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));}// 根據ID查詢用戶public User findUserById(int id) {String sql = "SELECT * FROM users WHERE id = ?";return jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<>(User.class));}
}

5. 異常處理

Spring JDBC 將 SQLException 轉換為 DataAccessException,可通過 @ExceptionHandler 統一處理:

@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(DataAccessException.class)public ResponseEntity<String> handleDataAccessException(DataAccessException ex) {return ResponseEntity.status(500).body("數據庫操作失敗: " + ex.getMessage());}
}

6. 事務管理(可選)

在 Service 層使用 @Transactional 管理事務:

@Service
public class UserService {@Autowiredprivate UserDao userDao;@Transactionalpublic void createUser(User user) {userDao.insertUser(user);// 其他數據庫操作(事務會回滾)}
}

7. 測試 DAO 層

使用 Spring Test 進行單元測試:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {DataSourceConfig.class, JdbcConfig.class})
public class UserDaoTest {@Autowiredprivate UserDao userDao;@Testpublic void testFindAllUsers() {List<User> users = userDao.findAllUsers();Assert.assertNotNull(users);}
}

補充說明

  • 簡化配置(Spring Boot)
    在 Spring Boot 中,只需添加 spring-boot-starter-jdbc 依賴,自動配置 HikariDataSourceJdbcTemplate,無需手動配置數據源。

  • 參數綁定
    使用 ? 占位符防止 SQL 注入,JdbcTemplate 自動處理參數預編譯。

  • 結果映射
    BeanPropertyRowMapper 自動將結果集映射到 POJO,需確保字段名與類屬性一致。


通過以上步驟,即可高效使用 Spring JDBC 進行數據庫操作,避免冗余代碼,同時保證資源安全和事務一致性。

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

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

相關文章

Java面試:探索Spring Boot與微服務的深度挑戰

場景&#xff1a;互聯網大廠Java求職者面試 在一個陽光明媚的下午&#xff0c;趙大寶來到了知名互聯網大廠的面試現場。他面臨的是一個嚴肅的面試官&#xff0c;準備對他的技術能力進行全面考核。 第一輪提問&#xff1a;基礎知識與Spring Boot應用 面試官&#xff1a;趙先生…

Spring Boot中的監視器:Actuator的原理、功能與應用

在 Spring Boot 應用中&#xff0c;監視器通常指 Spring Boot Actuator&#xff0c;一個內置的生產就緒工具&#xff0c;用于監控和管理運行中的應用。Actuator 提供了一系列 RESTful 端點&#xff0c;暴露應用的運行時信息&#xff0c;如健康狀態、性能指標、日志配置和環境變…

GitHub創建遠程倉庫

使用GitHub創建遠程倉庫&#xff1a;從零開始實現代碼托管與協作 前言 在當今軟件開發領域&#xff0c;版本控制系統已成為開發者必備的核心工具。作為分布式版本控制系統的代表&#xff0c;Git憑借其強大的分支管理和高效的協作能力&#xff0c;已成為行業標準。而GitHub作為…

Manus技術架構、實現內幕及分布式智能體項目實戰 線上高級實訓班

Manus技術架構、實現內幕及分布式智能體項目實戰 線上高級實訓班 模塊一&#xff1a;解密Manus分布式多智能體工作原理和架構內幕 ? 基于Claude和Qwen的大模型智能體Manus為何能夠迅速成為全球討論熱度最高、使用體驗最好、產業界最火爆的大模型智能體產品&#xff1f; ? Ma…

JS通過GetCapabilities獲取wms服務元數據信息并在SuperMap iClient3D for WebGL進行疊加顯示

獲取wms服務元數據信息并在三維webgl客戶端進行疊加顯示 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><tit…

【刷題Day21】TCP(淺)

說說 TCP 的四次揮手&#xff1f; TCP的四次揮手事用于安全關閉一個已建立的連接的過程&#xff0c;它確保雙方都能完成數據傳輸并安全地釋放連接資源。 簡述步驟&#xff1a; 第一次揮手&#xff08;FIN --> ACK&#xff09;&#xff1a;客戶端主動關閉連接&#xff0c;…

Springboot整合Redis主從

Springboot整合Redis主從 前言原配置現配置測試LettuceConnectionFactory.setShareNativeConnection 方法的作用 前言 SpringBoot版本&#xff1a;2.3.2.RELEASE 原配置 原yml配置內容&#xff1a; spring:# Redis服務器配置redis:host: 127.0.0.1# Redis服務器連接端口por…

git撤銷最近一次commit

在Git中&#xff0c;在撤銷最近一次的提交時&#xff0c;有幾種不同的方法&#xff0c;這取決于你想要的結果。下面是一些常見的方法&#xff1a; 1. 取消最近的提交&#xff08;但不刪除改動&#xff09; 如果你想要取消最近的提交&#xff0c;但是保留這些改動&#xff0c;以…

解決Docker 配置 daemon.json文件后無法生效

vim /etc/docker/daemon.json 在daemon中配置一下dns {"registry-mirrors": ["https://docker.m.daocloud.io","https://hub-mirror.c.163.com","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","ht…

QML--全局對象Qt

在 QML 中&#xff0c;Qt 是一個內置的全局對象&#xff0c;提供了許多核心功能、工具函數、環境信息和類型構造方法。以下是 Qt 全局對象的詳細分類和常見用途&#xff1a; 1. 工具函數 1.1 格式化與轉換 Qt.formatDate(date, format) / Qt.formatTime(date, format) 格式化…

前端筆記-Vue3(下)

學習參考視頻&#xff1a;尚硅谷Vue3入門到實戰&#xff0c;最新版vue3TypeScript前端開發教程_嗶哩嗶哩_bilibili vue3學習目標&#xff1a; VUE 31、Vue3架構與設計理念2、組合式API&#xff08;Composition API&#xff09;3、常用API&#xff1a;ref、reactive、watch、c…

Git遠程操作與標簽管理

目錄 1.理解分布式版本控制系統 2.遠程倉庫 3.新建遠程倉庫 4.克隆遠程倉庫 5.向遠程倉庫推送 6.拉取遠程倉庫 7.配置Git 7.1.忽略特殊文件 7.2.給命令配置別名 8.標簽管理 8.1.理解標簽 8.2.創建標簽 8.3.操作標簽 1.理解分布式版本控制系統 Git是目前世界上…

Vue3:component(組件:uniapp版本)

目錄 一、基本概述二、基本使用(父傳子)三、插槽四、子傳父 一、基本概述 在項目的開發過程中&#xff0c;頁面上井場會出現一些通用的內容&#xff0c;例如頭部的導航欄&#xff0c;如果我們每一個頁面都去寫一遍&#xff0c;那實在是太繁瑣了&#xff0c;所以&#xff0c;我…

C#語言實現PDF轉Excel

實現效果 第三方庫 ClosedXML iTextSharp 實現源碼 using System.Text; using iTextSharp.text.pdf; using iTextSharp.text.pdf.parser; using System.Text.RegularExpressions; using ClosedXML.Excel;namespace PdfToExcel_winform {public partial class MainForm : For…

如何將IDP映射屬性添加,到accountToken中 方便項目獲取登錄人信息

? 目標 你想要&#xff1a; 用戶通過 IdP 登錄&#xff08;SAML 或 OAuth2&#xff09;Keycloak 自動將 IdP 返回的屬性&#xff08;如&#xff1a;email、name、role 等&#xff09;映射到用戶賬戶中并把這些屬性加入到用戶登錄返回的 Access Token 中&#xff0c;供業務系…

JSON-RPC遠程控制

文章目錄 &#x1f310; 一、什么是 JSON-RPC&#xff1f;&#x1f4ec; 二、通信過程1?? 客戶端發起請求2?? 服務端處理請求&#xff0c;調用方法&#xff0c;返回結果 &#x1f4d1; 三、重要字段說明&#x1f6e0;? 四、核心函數與概念&#xff08;結合你的代碼&#x…

芝法醬躺平攻略(21)——kafka安裝和使用

本節內容比較初級&#xff0c;故接著躺平攻略寫 一、官網的下載 1.1 下載解壓 首先&#xff0c;去官網下載jar包&#xff0c;放進linux中&#xff0c;解壓到對應位置。 我的位置放在/WORK/MIDDLEWARE/kafka/4.0 1.2 常見配置 # 每個topic默認的分片數 num.properties4 # 數…

AutoSAR從概念到實踐系列之MCAL篇(二)——Mcu模塊配置及代碼詳解(上)

歡迎大家學習我的《AutoSAR從概念到實踐系列之MCAL篇》系列課程,我是分享人M哥,目前從事車載控制器的軟件開發及測試工作。 學習過程中如有任何疑問,可底下評論! 如果覺得文章內容在工作學習中有幫助到你,麻煩點贊收藏評論+關注走一波!感謝各位的支持! 根據上一篇內容中…

easypoi 實現word模板導出

特此非常致謝&#xff1a;easypoi實現word模板 基礎的可以參考上文&#xff1b; 但是我的需求有一點點不一樣。 這是我的模板&#xff1a;就是我的t.imgs 是個list 但是很難過的是easy poi 我弄了一天&#xff0c;我都沒有弄出來嵌套list循環怎么輸出顯示&#xff0c;更難過…

Unity中數據存儲_LitJson

文章目錄 LitJson一&#xff1a;介紹二&#xff1a;特點三&#xff1a;使用四&#xff1a;注意事項 LitJson 一&#xff1a;介紹 LitJson 是一個專為 .NET 設計的輕量級 JSON 處理庫&#xff0c;支持序列化和反序列化 JSON 數據。 二&#xff1a;特點 快速且輕量 無外部依賴…