## Spring 整合 JDBC 的方式
- 添加依赖
- 编写配置文件 db.properties
- bean.xml 配置修改
- 配置数据源
- 模板类配置
- 测试整合结果
## 案例实操
### 添加依赖
#### 数据库驱动 jar 包
~~~ java
mysql-connector-java-5.1.25-bin.jar
~~~
#### 数据库连接池相关 jar 包
~~~ java
c3p0-0.9.5.2.jar、mchange-commons-java-0.2.11.jar
~~~
#### Spring jdbc 相关 jar
~~~java
spring-jdbc-4.3.2.RELEASE.jar、spring-tx-4.3.2.RELEASE.jar
~~~
~~~ xml
~~~
### 配置文件db.properties
~~~ java
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
~~~
**以下为可选配置**
~~~java
initialPoolSize=20
maxPoolSize=100
minPoolSize=10
maxIdleTime=600
acquireIncrement=5
maxStatements=5
idleConnectionTestPeriod=60
~~~
### bean.xml 配置修改
**加载 properties 文件配置**
~~~ xml
~~~
~~~ xml
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">
~~~
### **配置数据源**
由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先 同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连 接池中申请一个就行,用完后再放回去。
**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 数据源配置**
~~~ xml
~~~
**C3P0 其他额外配置(对应的值在 db.properties 文件中指定)**
~~~xml
~~~
**对于 dbcp 数据源配置如下:**
~~~ xml
~~~
### 模板类配置
Spring 把 JDBC 中重复的操作建立成了一个模板类:org.springframework.jdbc.core.JdbcTemplate ,配置文件中加入
~~~xml
~~~
### 测试整合结果
**通过 junit 测试 jdbcTemplate bean 是否获取到**
~~~ java
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 将其装配到应用程序的上下文定义中:
~~~ xml
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
~~~
实际上,DataSourceTransactionManager 是通过调用 java.sql.Connection 来管理事务, 而后者是通过 DataSource 获取到的。通过调用连接的 commit()方法来提交事务,同样,事务失败则通过调用 rollback()方法进行回滚。需要视频配套资料或其他资料+我们小姐姐V lezijie007(加好友暗号98 ,不备注不加)