Spring JDBC配置與講解

目錄

  • 一、Spring JDBC概述
    • 1、Spring JDBC需要配置的依賴
    • 2、Spring配置項文件配置
  • 二、Spring JDBC的使用
    • 1、Spring JDBC的增加操作
    • 2、Spring JDBC的修改操作
    • 3、Spring JDBC的刪除操作
    • 4、Spring JDBC的查詢操作
  • 三、Spring JDBC的事務
    • 1、xml的形式進行事務
    • 2、@Transactional注解

一、Spring JDBC概述

Spring Data JDBC 是 Spring Data 項目的一部分,它提供了一種簡化的數據訪問方式,用于與關系型數據庫進行交互。與傳統的 ORM 框架相比,Spring Data JDBC 更加輕量級,并且更注重直接映射數據庫表結構和 SQL 查詢的控制。它基于 JDBC 驅動程序,提供了一套簡潔的 API 和注解,使開發人員能夠通過簡單的 Java 對象來表示數據庫表,并通過自動生成的 SQL 語句執行常見的 CRUD 操作。Spring Data JDBC 還支持復雜的關聯關系、查詢方法的定義和自定義 SQL 查詢等功能,使開發人員能夠更靈活地操作數據庫。

1、Spring JDBC需要配置的依賴

我們創建好maven項目之后,需要對maven項目添加相對應的依賴,在本文章當中如果我們想要使用Spring JDBC的時候需要添加如下的依賴 :

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.21</version></dependency><!--mysql驅動包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.12</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!--AOP聯盟--><dependency><groupId>aopalliance</groupId><artifactId>aopalliance</artifactId><version>1.0</version></dependency><!--Spring Aspects--><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>5.0.2.RELEASE</version></dependency><!--aspectj--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.3</version></dependency>

其中使用jdbc的核心依賴是:

    <dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.21</version></dependency><!--mysql驅動包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency>

使用AOP的依賴是:

 <!--AOP聯盟--><dependency><groupId>aopalliance</groupId><artifactId>aopalliance</artifactId><version>1.0</version></dependency><!--Spring Aspects--><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>5.0.2.RELEASE</version></dependency><!--aspectj--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.3</version></dependency>

2、Spring配置項文件配置

我們使用Spring AOP、SpringIoC、Spring JDBC的情況下,我們需要在maven項目中的resources文件下創建Spring的配置項文件,并且進行配置。
在這里插入圖片描述

在這里插入圖片描述
Spring.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"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 配置數據源 --><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/springjdbc"/><property name="username" value="root"/><property name="password" value="12171032"/></bean><!-- 配置 JdbcTemplate --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"/></bean>
</beans>

其中: xmlns:tx="http://www.springframework.org/schema/tx"是為了防止事務爆紅把必須添加的,不添加使用事務的時候會爆紅。
需要在Spring配置自己的數據庫,以及配置jdbcTemplate,需要將這兩部分交給IoC容器管理。

二、Spring JDBC的使用

該項目的目錄如下創建:
在這里插入圖片描述
entity目錄中查詢返回來的結果。
dao層用來存放執行和數據庫交互的文件的目錄。
User類創建如下:

package com.example.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private Integer id;private String username;private Date birthday;private String sex;private String address;}

如果想要使用lombok的情況下,就得按照上面情況引入lombok依賴:
在這里插入圖片描述
建立的數據庫可執行代碼如下(需要自己建立好數據庫,這里只提供創建表的sql語句):

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','男','廣州');

Test測試文件:

public class Test1 {private ApplicationContext applicationContext = new ClassPathXmlApplicationContext("Spring.xml");private JdbcTemplate jdbcTemplate = (JdbcTemplate) applicationContext.getBean(JdbcTemplate.class);}

測試文件得利用DI將jdbcTemplate加載到當前文件當中

1、Spring JDBC的增加操作

jdbc中的新增操作:

    @Testpublic void add(){String sql = "insert into user(username,sex,address) values('as','男','上海')";jdbcTemplate.execute(sql);}

2、Spring JDBC的修改操作

    @Testpublic void update(){String sql = "update user set username ='劉純亞' where id = 1";jdbcTemplate.update(sql);}

3、Spring JDBC的刪除操作

    @Testpublic void delete(){String sql = "delete from user where id = ?";jdbcTemplate.update(sql,1);}

4、Spring JDBC的查詢操作

    @Testpublic void searchAll(){String sql = "select * from user";List<User> userList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class));for(User user:userList){System.out.println(user);}}

三、Spring JDBC的事務

案列A對B轉賬,A的錢少100,B的錢多100,兩者具有原子性,要不同時成功,要不同時失敗。數據庫中的數據如下:
在這里插入圖片描述

1、xml的形式進行事務

對Spring.xml進行修改:

    <bean id="txtManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><bean id="adaoImpl" class="com.example.dao.impl.AdaoImpl"><property name="jdbcTemplate" ref="jdbcTemplate"></property></bean><tx:advice id="txAdvice" transaction-manager="txtManager"><tx:attributes><tx:method name="transfer" propagation="REQUIRED" isolation="DEFAULT" read-only="false"/></tx:attributes></tx:advice><aop:config><aop:pointcut id="pc" expression="execution(* com.example.dao.impl.AdaoImpl.transfer(..))"/><aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/></aop:config>
 <bean id="txtManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean>

用來加載DataSourceTransactionManager,上面的操作是通過AOP對原本的事務進行增強,而不是通過修改原本的代碼。
AOP操作:

    <aop:config><aop:pointcut id="pc" expression="execution(* com.example.dao.impl.AdaoImpl.transfer(..))"/><aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/></aop:config>

Adao和Adaoimpl中的代碼如下:

package com.example.dao.impl;import com.example.dao.Adao;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.jdbc.core.JdbcTemplate;
@NoArgsConstructor
@Data
@AllArgsConstructor
public class AdaoImpl implements Adao {private JdbcTemplate jdbcTemplate;@Overridepublic void transfer(String A, String B, int money) {String sql1 = "update peoplemoney set money = money-? where id = ?";String sql2 = "update peoplemoney set money = money+? where id = ?";jdbcTemplate.update(sql1,money,A);jdbcTemplate.update(sql2,money,B);}
}
package com.example.dao;public interface Adao {public void transfer(String A,String B,int money);
}

測試類中的代碼:

    @Testpublic void  m1(){Adao adaoImpl = (Adao) applicationContext.getBean("adaoImpl");adaoImpl.transfer("1","2",100);System.out.println(adaoImpl);}

當事務沒有回滾的時候,可以實現A減少100,B增加100。
在這里插入圖片描述
自動添加錯誤之后;
在這里插入圖片描述
測試結果:
在這里插入圖片描述
在這里插入圖片描述
數據庫中的數據沒有發生改變出現了事務回滾。

2、@Transactional注解

AdaoImpl中的代碼修改如下:

package com.example.dao.impl;import com.example.dao.Adao;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@NoArgsConstructor
@Data
@AllArgsConstructorpublic class AdaoImpl implements Adao {private JdbcTemplate jdbcTemplate;@Override@Transactional(rollbackFor = Exception.class)public void transfer(String A, String B, int money) {String sql1 = "update peoplemoney set money = money-? where id = ?";String sql2 = "update peoplemoney set money = money+? where id = ?";jdbcTemplate.update(sql1,money,A);System.out.println(1/0);jdbcTemplate.update(sql2,money,B);}
}

Spring.xml中的代碼修改如下:

<!--    <tx:advice id="txAdvice" transaction-manager="txtManager">-->
<!--        <tx:attributes>-->
<!--            <tx:method name="transfer" propagation="REQUIRED" isolation="DEFAULT" read-only="false"/>-->
<!--        </tx:attributes>-->
<!--    </tx:advice>-->
<!--    <aop:config>-->
<!--        <aop:pointcut id="pc" expression="execution(* com.example.dao.impl.AdaoImpl.transfer(..))"/>-->
<!--        <aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/>-->
<!--    </aop:config>--><tx:annotation-driven transaction-manager="txtManager"></tx:annotation-driven><context:component-scan base-package="com.example"></context:component-scan>

注釋掉AOP等保留DataSourceTransactionManager,配合@Transactional使用就可以完成事務。

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

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

相關文章

【AI智能體】Spring AI MCP 服務常用開發模式實戰詳解

目錄 一、前言 二、MCP 介紹 2.1 MCP是什么 2.2 MCP 核心特點 2.3 Spring AI MCP 介紹 2.3.1 Spring AI MCP架構 2.3.2 Spring AI MCP分層說明 2.4 兩種模式介紹 三、本地開發SSE模式 3.1 搭建mcp-server 3.1.1 導入工程核心依賴 3.1.2 添加配置文件 3.1.3 提供兩個…

OpenStack 入門與實踐

一、云計算概述 1.1 云計算的定義與本質 云計算&#xff08;Cloud Computing&#xff09;是一種基于網絡的超級計算模式&#xff0c;它能夠根據用戶的不同需求&#xff0c;動態提供所需的計算資源、存儲資源和網絡資源等。這種模式就像我們日常生活中使用水電煤氣一樣&#x…

AntV L7入門教程

以下教程將系統地介紹 AntV?L7 的核心 Scene 類用法&#xff0c;涵蓋實例化、地圖配置、視圖操作、圖層管理、事件監聽及資源銷毀等常用 API&#xff0c;并為每個方法給出完整示例代碼。所有示例均基于官方 API 文檔 ([l7.antv.antgroup.com][1])。 一、安裝與引入 # 安裝 L7…

【邊緣計算】場景

工業互聯網 對現場采集的數據進行數據預處理&#xff0c;將現場有用的信息提取出來實時上傳給平臺&#xff0c;為平臺大大減輕了處理的工作量。 匯聚現場數據統一接口上傳數據到云端&#xff0c;大大提高系統多樣部署的安全性&#xff0c;解決現場數據跨域訪問的問題。制造企業…

【FPGA學習】DDS信號發生器設計

目錄 一、設計原理與準備? 1.1 DDS 原理? 1.2 IP 核學習與準備?&#xff1a;FPGA開發中常用IP核——ROM/RAM/FIFO 2、ROM文件的設置 1.3 開發環境搭建? 二、DDS 信號發生器設計實現 2.1 系統架構設計? 2.2 代碼編寫與模塊實現? 三、測試結果與總結? 參考文獻&…

pyqt 簡單條碼系統

生產數據管理系統說明 系統概述 這是一個基于PyQt5和pyodbc開發的生產數據管理系統&#xff0c;主要用于管理生產過程中的物料綁定和查詢操作。系統提供了上料綁定和下料查詢功能&#xff0c;支持與SQL Server數據庫交互&#xff0c;實現數據的插入、查詢、更新和刪除操作。界…

【unitrix】 4.1 類型級加一操作(Add1.rs)

一、原碼 這段代碼實現了一個類型級的加一操作(Add1 trait)&#xff0c;用于在Rust的類型系統中進行數值加一運算。 //! 加一操作特質實現 / Increment operation trait implementation //! //! 說明&#xff1a; //! 1. Z0、P1,、N1 1&#xff0c;常規計算 //! 2. …

git工作中常用

1.管理本地文件 git init//初始化生成一個本地倉庫 git add * //添加到暫存區 git commit–m “message” //提交到本地倉庫 2.刪除本地分支 git branch -d local_branch_name3.隱藏及解除隱藏 git stashgit stash pop4.遠程新建分支&#xff0c;在本地簽出時候怎么看到 …

Golang 中接口嵌套的詳細說明和使用示例

在 Go 語言中&#xff0c;接口嵌套&#xff08;也稱為接口組合&#xff09;是一種強大的特性&#xff0c;它允許你通過組合現有接口來創建新的接口。這種方式遵循了 Go 的組合優于繼承的設計哲學。 接口嵌套的基本概念 接口嵌套是指在一個接口中嵌入其他接口&#xff0c;從而…

數智管理學(二十四)

第二章 數智化重塑管理的核心 第三節 動態資源配置與實時優化 在當今數智化浪潮的席卷下&#xff0c;企業管理面臨著前所未有的變革與挑戰。資源配置作為企業管理的核心環節之一&#xff0c;其方式和效率直接影響著企業的運營成本、生產效率和市場競爭力。傳統的靜態資源配置…

Redis 各版本差異及性能測試指標對比

Redis 各版本差異及性能測試指標對比 Redis 主要版本差異 Redis 2.x 系列 主要特性&#xff1a; 支持主從復制支持簡單的持久化(RDB和AOF)發布/訂閱功能事務支持 局限性&#xff1a; 單線程模型集群功能有限 Redis 3.x 系列 重大改進&#xff1a; 引入Redis Cluster(官方…

Python圖形化秒表:使用Turtle打造精確計時工具

?? 編程基礎第一期《6-30》–簡易計時器/秒表&#xff0c;這是一個使用Python的turtle和time模塊實現的簡易計時器/秒表程序&#xff0c;提供簡潔的數字時間顯示。 目錄 &#x1f31f; 功能特點&#x1f680; 使用方法&#x1f9e9; 程序架構設計&#x1f4bb; 代碼詳解窗口和…

【軌物方案】軌物科技|LoRaWAN 賦能智能光伏清掃,解鎖電站高效運維新時代

在大型集中式光伏電站的廣袤土地上&#xff0c;清掃機器人的高效運行是保障發電效率的關鍵。然而&#xff0c;傳統的無線通信方式在這些偏遠、無4G/5G信號覆蓋的區域&#xff0c;往往步履維艱。作為專注于工業物聯網解決方案的軌物科技&#xff0c;我們深知這些痛點&#xff0c…

Python函數實戰:從基礎到高級應用

Python-函數 Python 中可以使用def關鍵字來定義函數。 函數定義規則&#xff1a; 函數代碼塊以 def 關鍵詞開頭&#xff0c;后接函數標識符名稱和圓括號 ()。任何傳入參數和自變量必須放在圓括號中間&#xff0c;圓括號之間可以用于定義參數。函數的第一行語句可以選擇性地使…

Mac在局域網中突然很慢(包括SMB、NFS、SCP、SSH、Ping等場景均很慢)

今天 SMB 又突然好慢&#xff0c;大概只有 8-9 MB/s&#xff0c;而蘋果 SMB 很容易突然很慢是出了名的。我就想裝 NFS&#xff0c;但是 NFS 弄好之后還是很慢&#xff0c;我服了&#xff0c;我就檢查了scp等場景&#xff0c;都很慢&#xff0c;但是互聯網下載速度還是很快的。 …

UMAP:用于降維的均勻流形近似和投影實驗

關鍵詞&#xff1a; Uniform Manifold Approximation and Projection (UMAP)&#xff1a;均勻流形近似與投影 一、說明 對于降維&#xff0c;首先看數據集是否線性&#xff0c;如果是線性的用pca降維&#xff1b;如果是非線性數據&#xff0c;t-SNE或者UMAP&#xff0c;本文針…

【Datawhale組隊學習202506】YOLO-Master task03 IOU總結

系列文章目錄 task01 導學課程 task02 YOLO系列發展線 文章目錄 系列文章目錄前言1 功能分塊1.1 骨干網絡 Backbone1.2 頸部網絡 Neck1.3 頭部網絡 Head1.3.1 邊界框回歸頭1.3.2 分類頭 2 關鍵概念3 典型算法3.1 NMS3.2 IoU 總結 前言 Datawhale是一個專注于AI與數據科學的開…

Spring IOC容器核心揭秘:BeanFactory創建、配置加載解析并注冊為BeanDefinition

文章目錄 一、為何這個階段如此重要&#xff1f;二、整體流程全景圖三、源碼級深度解析1. BeanFactory的誕生源碼入口&#xff1a;refresh()方法核心方法&#xff1a;obtainFreshBeanFactory()核心實現&#xff1a;refreshBeanFactory()BeanFactory實例化 2. ★ 核心&#xff1…

解鎖n8n:開啟工作流自動化的無限可能(5/6)

文章摘要&#xff1a;n8n 是一款開源低代碼工作流自動化平臺&#xff0c;通過可視化拖放節點創建復雜工作流&#xff0c;無需大量代碼。具有強大集成能力、數據轉換、錯誤處理等功能&#xff0c;適用于數據同步、客戶關系管理、IT 自動化等場景。相比 Zapier、IFTTT 等工具&…

數據賦能(308)——合作共享——數據交流

概述 重要性如下&#xff1a; 信息準確性&#xff1a;數據交流原則確保在數據傳遞過程中信息的準確性&#xff0c;這是決策和業務活動的基礎。決策支持&#xff1a;準確的數據交流為決策提供有力支持&#xff0c;幫助組織做出更明智的決策。業務效率&#xff1a;有效的數據交…