Spring框架中 配置c3p0连接池
开发准备:
1.导入jar包:
ioc基本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>
以上就完成了对数据库的访问(向数据库中插入了一条记录),个人练习总结,请多指教。
-----------------------------------------
欢迎大家转载,但请注明原创链接:http://www.cnblogs.com/Joke-Jay/p/6502507.html
查看更多随笔:http://www.cnblogs.com/Joke-Jay/