通過 Spring 框架如何進行JDBC操作呢?
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-XS2e0fOJ-1601453488065)(https://imgkr.cn-bj.ufileos.com/50416f44-5b7e-43bb-a0c4-ee71be577c04.jpg)]
Spring 整合 JDBC 的方式
- 新增依賴
- 編寫配置檔案 db.properties
- bean.xml 配置修改
- 配置資料來源
- 模板類配置
- 測試整合結果
案例實操
新增依賴
資料庫驅動 jar 包
mysql-connector-java-5.1.25-bin.jar
資料庫連線池相關 jar 包
c3p0-0.9.5.2.jar、mchange-commons-java-0.2.11.jar
Spring jdbc 相關 jar
spring-jdbc-4.3.2.RELEASE.jar、spring-tx-4.3.2.RELEASE.jar
<!-- spring 框架座標依賴新增 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<!-- aop -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
<!-- mysql 驅動包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
<!-- c3p0 連線池 -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<!-- spring jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<!-- springs事務 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
配置檔案db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_jdbc?useUnicode=true&characterEncod
ing=utf8
jdbc.user=root
jdbc.password=root
mysql8版本以上
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/user?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
jdbc.user=root
jdbc.password=root
以下為可選配置
initialPoolSize=20
maxPoolSize=100
minPoolSize=10
maxIdleTime=600
acquireIncrement=5
maxStatements=5
idleConnectionTestPeriod=60
bean.xml 配置修改
載入 properties 檔案配置
<!-- 載入 properties 配置檔案 -->
<context:property-placeholder location="db.properties" />
<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd">
<!-- 載入properties 配置檔案 -->
<context:property-placeholder location="db.properties" />
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
配置資料來源
由於建立資料庫連線是一個非常耗時耗資源的行為,所以通過連線池預先 同資料庫建立一些連線,放在記憶體中,應用程式需要建立資料庫連線時直接到連 接池中申請一個就行,用完後再放回去。
C3P0 與 dbcp 二選一即可
DBCP(DataBase connection pool),資料庫連線池。是 apache 上的一個 java 連線池專案,也是 tomcat 使用的連線池元件。單獨使用 dbcp 需要 2 個包:commons-dbcp.jar,commons-pool.jar dbcp,沒有自動回收空閒連線的功能.
C3P0 是一個開源的 JDBC 連線池,它實現了資料來源,支援 JDBC3 規範和 JDBC2 的標準擴充套件。目前使用它的開源專案有 Hibernate,Spring 等。c3p0 有自動回收空閒連線功能
C3P0 資料來源配置
<!-- 配置 c3p0 資料來源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${driver}"></property>
<property name="jdbcUrl" value="${url}"></property>
<property name="user" value="${user}"></property>
<property name="password" value="${password}"></property>
</bean>
C3P0 其他額外配置(對應的值在 db.properties 檔案中指定)
<!-- 指定連線池中保留的最大連線數. Default:15-->
<property name="maxPoolSize" value="${maxPoolSize}"/>
<!-- 指定連線池中保留的最小連線數-->
<property name="minPoolSize" value="${minPoolSize}"/>
<!-- 指定連線池的初始化連線數 取值應在 minPoolSize 與 maxPoolSize 之 間.Default:3-->
<property name="initialPoolSize" value="${initialPoolSize}"/>
<!-- 最大空閒時間,60 秒內未使用則連線被丟棄。若為 0 則永不丟棄。 Default:0-->
<property name="maxIdleTime" value="${maxIdleTime}"/>
<!-- 當連線池中的連線耗盡的時候 c3p0 一次同時獲取的連線數. Default:3-->
<property name="acquireIncrement" value="${acquireIncrement}"/>
<!-- JDBC 的標準,用以控制資料來源內載入的 PreparedStatements 數量。
但由於預快取的statements屬於單個connection而不是整個連線池所以設定這個引數需要
考慮到多方面的因數.如果 maxStatements 與 maxStatementsPerConnection 均為 0,則快取
被關閉。Default:0-->
<property name="maxStatements" value="${maxStatements}"/>
<!-- 每 60 秒檢查所有連線池中的空閒連線.Default:0 -->
<property name="idleConnectionTestPeriod" value="${idleConnectionTestPeriod}"/>
對於 dbcp 資料來源配置如下:
<!-- 配置 dbcp 資料來源-->
<bean id="myDataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="${driver}" />
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
<!-- 連線池啟動時的初始值 -->
<property name="initialSize" value="1"/>
<!-- 最大空閒值.當經過一個高峰時間後,連線池可以慢慢將已經用不到的連線慢慢釋放一部分,一直減少到 maxIdle 為止 -->
<property name="maxIdle" value="2"/>
<!-- 最小空閒值.當空閒的連線數少於閥值時,連線池就會預申請一些連線,以避免洪峰來時再申請而造成的效能開銷 -->
<property name="minIdle" value="1"/>
</bean>
模板類配置
Spring 把 JDBC 中重複的操作建立成了一個模板類:org.springframework.jdbc.core.JdbcTemplate ,配置檔案中加入
<!-- jdbcTemplate 配置 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
測試整合結果
通過 junit 測試 jdbcTemplate bean 是否獲取到
public class TestSpringJdbc {
private JdbcTemplate jdbcTemplate;
@Before
public void init(){
ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
jdbcTemplate=(JdbcTemplate) ctx.getBean("jdbcTemplate");
}
@Test
public void test() {
String sql="select count(1) from account";
Integer total= jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println("總計路數:"+total);
}
}
擴充套件
JDBC 事務
如果應用程式中直接使用 JDBC 來進行持久化,此時使用 DataSourceTransactionManager 來處理事務邊界。為了使用 DataSourceTransactionManager,需要使用如下的 XML 將其裝配到應用程式的上下文定義中:
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
界。為了使用 DataSourceTransactionManager,需要使用如下的 XML 將其裝配到應用程式的上下文定義中:
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
實際上,DataSourceTransactionManager 是通過呼叫 java.sql.Connection 來管理事務, 而後者是通過 DataSource 獲取到的。通過呼叫連線的 commit()方法來提交事務,同樣,事務失敗則通過呼叫 rollback()方法進行回滾。
需要專案資料原始碼+我們程式設計師小姐姐v:lezijie007(加好友時備註:B站-LT,不備註拒絕新增喲)
相關文章
- Spring04——Spring操作JdbcTemplate進行JDBC操作SpringJDBC
- Spring JDBC框架SpringJDBC框架
- 如何進行機器學習框架選擇機器學習框架
- 如何進行框架的選擇框架
- 如何進行 Python效能分析,你才能如魚得水?Python
- es通過JDBC導數測試JDBC
- JSON資料如何進行解析呢,方式有哪些?JSON
- java通過jdbc連結資料庫JavaJDBC資料庫
- 使用UDP如何進行網路通訊UDP
- 如何進行有效的績效溝通?
- Java Stream 流如何進行合併操作Java
- 通過Socket進行Http/Https 網頁操作HTTP網頁
- 【Spring】jdbcSpringJDBC
- Java程式設計師面試時,如何進行自我介紹呢?Java程式設計師面試
- 在進行大資料視覺化分析時,到底要如何進行呢?大資料視覺化
- 如何通過C#操作Access,本人親測通過C#
- java通過jdbc連線oracle報錯No suitable driverJavaJDBCOracleUI
- 如何進行雲端儲存架構框架設計?架構框架
- 通過資料庫鏈執行TEXT操作的小bug資料庫
- 遊戲出海韓國如何進行合規性操作?遊戲
- jdbc操作AutoCommitJDBCMIT
- Spring通過factory配置beanSpringBean
- spring通過註解配置Spring
- 通過命令curl 操作ElasticSearch指南Elasticsearch
- 通過Spring @PostConstruct 和 @PreDestroy 方法 實現初始化和銷燬bean之前進行的操作SpringStructBean
- 開始懷疑Spring框架的jdbc事務處理方式Spring框架JDBC
- 專案實施中如何進行有效的溝通?
- 同步容器(如Vector)並不是所有操作都執行緒安全!~執行緒
- java應用通過jdbc連線資料庫jdbc的串的3種寫法:JavaJDBC資料庫
- Spring的JDBC支援SpringJDBC
- Spring4:JDBCSpringJDBC
- Java的JDBC通過SSH Tunnel連線MySQL資料庫JavaJDBCMySql資料庫
- powerdesigner15通過jdbc連線oracle10.2.0.4JDBCOracle
- 通過串列埠進行通訊 :串列埠
- 聊聊jdbc的batch操作JDBCBAT
- jdbc Statement和PrepareStatement操作JDBCREST
- 多個不同的app應用間應該如何進行訊息推送呢?APP
- 我們為什麼需要原型設計,該如何進行原型設計呢?原型