Spring框架中 配置c3p0连接池
开发准备:
1.导入jar包:

jdbcTemplate基本jar

c3p0基本jar

别忘了mysql数据库驱动jar

原始程序代码:不使用配置文件方式(IOC)生成访问数据库对象
1 package org.dao;
2 import java.beans.PropertyVetoException;
3 import org.springframework.jdbc.core.JdbcTemplate;
4 import org.springframework.jdbc.datasource.DriverManagerDataSource;
5 import com.mchange.v2.c3p0.ComboPooledDataSource;
6
7 public class Dao {
8 public void add(){
9 /*
10 //使用spring框架中的jdbcTemplate完成数据库的访问
11
12 //设置数据库的信息
13 DriverManagerDataSource dmds=new DriverManagerDataSource();
14 dmds.setDriverClassName("com.mysql.jdbc.Driver");
15 dmds.setUrl("jdbc:mysql://localhost:3306/c3p0jdbctemplate");
16 dmds.setUsername("root");
17 dmds.setPassword("jay571018");
18
19 //创建JdbcTemplate对象 设置数据源
20 JdbcTemplate jdbcTemplate=new JdbcTemplate(dmds);
21
22 //调用方法 实现数据库的访问
23 String sql="insert into User(name,password) values(?,?)";
24 jdbcTemplate.update(sql,"joke",520);
25 */
26
27 //使用c3p0连接池 配置数据库的信息 然后创建JdbcTemplate对象 设置数据源 完成对数据库访问
28 ComboPooledDataSource datesourse=new ComboPooledDataSource();
29 try {
30 datesourse.setDriverClass("com.mysql.jdbc.Driver");
31 } catch (PropertyVetoException e) {
32 // TODO Auto-generated catch block
33 e.printStackTrace();
34 }
35 datesourse.setJdbcUrl("jdbc:mysql://localhost:3306/c3p0jdbctemplate");
36 datesourse.setUser("root");
37 datesourse.setPassword("jay571018");
38 //创建JdbcTemplate对象 设置数据源
39 JdbcTemplate jdbcTemplate=new JdbcTemplate(datesourse);
40
41 //调用方法 实现数据库的访问
42 String sql="insert into User(name,password) values(?,?)";
43 jdbcTemplate.update(sql,"joke",520);
44 System.out.println("增加了一条信息。。。。。。。");
45 }
46 } 1 package org.service;
2 import org.dao.*;
3 public class Service {
4 //想在service中调用dao对象的add方法 创建dao对象 生成对应的set方法
5 private Dao dao;
6
7 //生成set方法 注入dao对象
8 public void setDao(Dao dao){
9 this.dao=dao;
10 }
11 public void add(){
12 dao.add();
13 }
14 }1 package org.test;
2 import org.junit.Test;
3 import org.service.Service;
4 import org.springframework.context.ApplicationContext;
5 import org.springframework.context.support.ClassPathXmlApplicationContext;
6
7 public class TestDemo {
8 @Test
9 public void testDemo(){
10 ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
11 Service s=(Service) ac.getBean("service");
12 s.add();
13 }
14 }1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:aop="http://www.springframework.org/schema/aop" 6 xmlns:tx="http://www.springframework.org/schema/tx" 7 xsi:schemaLocation="http://www.springframework.org/schema/beans 8 http://www.springframework.org/schema/beans/spring-beans.xsd 9 http://www.springframework.org/schema/context 10 http://www.springframework.org/schema/context/spring-context.xsd 11 http://www.springframework.org/schema/aop 12 http://www.springframework.org/schema/aop/spring-aop.xsd 13 http://www.springframework.org/schema/tx 14 http://www.springframework.org/schema/tx/spring-tx.xsd"> 15 <bean id="dao" class="org.dao.Dao"></bean> 16 <bean id="service" class="org.service.Service"> 17 <property name="dao" ref="dao"></property> 18 </bean> 19 </beans>
改进程序代码:使用配置文件方式(IOC)生成访问数据库对象
需要注意的是:使用配置文件生成bean对象时,在的类中一定需要有属性对应的set方法以及无参构造方法(不写的话默认有一个无参构造),否则无法完成注入,
两者缺一不可,因为使用set注入的时候,spring先调用了构造方法实例化对象,然后才对对象中的属性进行了注入。
另外IOC注入方式有两种,一种set方式,另外一种是构造注入,构造注入的时候当然需要构造函数(有参数)。
1 package org.dao;
2 import java.beans.PropertyVetoException;
3
4 import org.springframework.jdbc.core.JdbcTemplate;
5 import org.springframework.jdbc.datasource.DriverManagerDataSource;
6
7 import com.mchange.v2.c3p0.ComboPooledDataSource;
8
9 public class Dao {
10 private JdbcTemplate jdbcTemplate;
11
12 //设置set方法 为了之后的注入
13 public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
14 this.jdbcTemplate = jdbcTemplate;
15 }
16 public void add(){
17 String sql="insert into User(name,password) values(?,?)";
18 jdbcTemplate.update(sql,"joke2",520);
19 System.out.println("增加了一条信息。。。。。。。");
20 }
21 } 1 package org.service;
2 import org.dao.*;
3 public class Service {
4 //想在service中调用dao对象的add方法 创建dao对象 生成对应的set方法
5 private Dao dao;
6
7 //生成set方法 注入dao对象
8 public void setDao(Dao dao){
9 this.dao=dao;
10 }
11 public void add(){
12 dao.add();
13 }
14 }1 package org.test;
2 import org.junit.Test;
3 import org.service.Service;
4 import org.springframework.context.ApplicationContext;
5 import org.springframework.context.support.ClassPathXmlApplicationContext;
6
7 public class TestDemo {
8 public static void main(String args[]){
9 ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
10 Service s=(Service) ac.getBean("service");
11 s.add();
12 }
13 }1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:aop="http://www.springframework.org/schema/aop" 6 xmlns:tx="http://www.springframework.org/schema/tx" 7 xsi:schemaLocation="http://www.springframework.org/schema/beans 8 http://www.springframework.org/schema/beans/spring-beans.xsd 9 http://www.springframework.org/schema/context 10 http://www.springframework.org/schema/context/spring-context.xsd 11 http://www.springframework.org/schema/aop 12 http://www.springframework.org/schema/aop/spring-aop.xsd 13 http://www.springframework.org/schema/tx 14 http://www.springframework.org/schema/tx/spring-tx.xsd"> 15 <!-- 创建连接池 配置连接池的属性值 --> 16 <bean id="ds" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 17 <property name="driverClass" value="com.mysql.jdbc.Driver"></property> 18 <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/c3p0jdbctemplate"></property> 19 <property name="user" value="root"></property> 20 <property name="password" value="jay571018"></property> 21 </bean> 22 23 <!-- dao中注入jdbctemplate对象 --> 24 <bean id="dao" class="org.dao.Dao"> 25 <property name="jdbcTemplate" ref="jdbctemplate"></property> 26 </bean> 27 28 <!-- service中注入dao对象 --> 29 <bean id="service" class="org.service.Service"> 30 <property name="dao" ref="dao"></property> 31 </bean> 32 33 <!-- 创建jdbctemplate对象 并且向其中注入连接池对象 dateSource是该对象中数据源的属性 --> 34 <bean id="jdbctemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 35 <property name="dataSource" ref="ds"></property> 36 </bean> 37 38 </beans>
注入关系:
1.因为service类需要调用dao类中的方法,所以在service中生成了一个dao对象,并且存在set方法
<!-- service中注入dao对象 --> 29 <bean id="service" class="org.service.Service"> 30 <property name="dao" ref="dao"></property> 31 </bean>
2.在dao类中要对数据库进行操作,所以创建jdbcTemplate对象,并且生成set方法
23 <!-- dao中注入jdbctemplate对象 --> 24 <bean id="dao" class="org.dao.Dao"> 25 <property name="jdbcTemplate" ref="jdbctemplate"></property> 26 </bean>
3.但是jdbcTemplate没有设置数据源,所以我们导入了数据库连接池,而且在配置文件中直接生成了c3p0连接池对象,就是用于jdbcTemplate对象的实例化
33 <!-- 创建jdbctemplate对象 并且向其中注入连接池对象 dateSource是该对象中数据源的属性 --> 34 <bean id="jdbctemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 35 <property name="dataSource" ref="ds"></property> 36 </bean>
4. <!-- 创建连接池 配置连接池的属性值 -->
<bean id="ds" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 17 <property name="driverClass" value="com.mysql.jdbc.Driver"></property> 18 <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/c3p0jdbctemplate"></property> 19 <property name="user" value="root"></property> 20 <property name="password" value="jay571018"></property> 21 </bean>
以上就完成了对数据库的访问(向数据库中插入了一条记录),个人练习总结,请多指教。