JdbcTemplate:用於操作數據庫,與Dbutils一樣,是一個操作數據庫的工具。
首先聲明事物是很簡單的,只是為了展現例子,需要做很多准備工作。
1)使用c3p0獲取連接:
先導入mysql的jar包: mysql-connector-java-8.0.16.jar
再導入c3p0的3個jar包: c3p0-0.9.5.2.jar c3p0-oracle-thin-extras-0.9.5.2.jar mchange-commons-java-0.2.11.jar
下載地址:https://sourceforge.net/projects/c3p0/files/latest/download?source=files ——等待一會自動彈出下載框
c3p0的基礎知識:https://www.cnblogs.com/ygj0930/p/6405861.html
2)創建配置文件:
先創建:db.properties https://blog.csdn.net/u013164931/article/details/76283884
jdbc.user=root jdbc.pssward=123456 jdbc.driverClass=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT jdbc.initPoolSize=5 jdbc.maxPoolSize=10
配置xml文件
<!--導入資源文件--> <context:property-placeholder location="classpath:SpringAOP_Transaction/db.properties"></context:property-placeholder> <!--配置c3p0數據源--> <bean id="dataSours" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="user" value="${jdbc.user}"/> <property name="password" value="${jdbc.pssward}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="driverClass" value="${jdbc.driverClass}"/> <property name="initialPoolSize" value="${jdbc.initPoolSize}"/> <property name="maxPoolSize" value="${jdbc.maxPoolSize}"/> </bean>
這個時候要記得測試資源配置有沒有問題
3)配置JdbcTemplate
<!--配置spring的jdbcTemplate--> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean>
這個時候要記得測試
4)事物的准備工作:
數據庫:
CREATE TABLE `student`.`book` ( `isbn` VARCHAR(50) NOT NULL, `book_name` VARCHAR(100) NULL, `price` INT NULL, PRIMARY KEY (`isbn`)); CREATE TABLE `student`.`book_stock` ( `isbn` VARCHAR(50) NOT NULL, `stock` INT NULL, PRIMARY KEY (`isbn`)); CREATE TABLE `student`.`account` ( `username` VARCHAR(50) NOT NULL, `balance` INT NULL, PRIMARY KEY (`username`));
基本的方法:
代碼不貼了。。。
5)聲明式事務: XML配置文件,配置兩個
<!--創建事務管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!--加入數據源--> <property name="dataSource" ref="dataSource"></property> </bean> <!--啟用事務注解--> <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
注:啟用事務注解的資源頭文件為xmlns:tx="http://www.springframework.org/schema/tx"
在要啟用事務的方法前面@Transactional寫上注解
//在方法寫注解,啟用事務 @Transactional @Override public void purchase(String username, String isbn) { //1獲取書的單價 int price=bookShopDao.findBookPriceByIsbn(isbn); //2更新庫存 bookShopDao.updateBookStock(isbn); //3 更新賬號余額 bookShopDao.updateUserAccunt(username,price); }