dbcp在连接数超过最大值时,所有链接都会断开。没有自动回收空闲的功能。
c3p0在连接超过最大空闲连接时间时,会断掉当前连接。有自动回收空闲的功能。
jdbcTemplate是Spring提供的操作数据库的功能。
环境搭建
创建数据库和表
1 2 3 4 5 6 7 8 9 10
| create databese spring; use spring; create table t_user( id int primary key auto_increment, username varchar(50), password varchar(32) );
insert into t_user(username,password)values('jack','123'); insert into t_user(username,password)values('rose','456');
|
创建bean,数据模型
1 2 3 4 5 6
| public class User{ private Integer id; private String username; private String password; }
|
API的使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class Demo{ @Test public void test(){ BasicDataSopurce ds = new BasicDataSource(); ds.setDicerClassName("com.nysql.jdbc.Driver"); ds.setUrl("jdbc:mysql:///spring"); ds.setUsername("root"); ds.setPassword("123456"); JdbcTemplate jt = new JdbcTempalte(dataSource); jt.update("insertr into t_user(username,password) value(?,?);","name03","777"); } }
|
XML配置
通过上面api使用中可以发现,用到的类有BasicDataSopurce,JdbcTemplate。以及实际在项目中,我们应该通过Dao类调用数据库。这些类都可以通过Spring创建。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <bean id="dataSource" class="com.apache.commons.dbcp.BasicDataSource"> <property name="dicerClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql:///spring"/> <property name="username" value="root"/> <property name="password" value="123456"/> </bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.jdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean>
<bean id="userDao" class="com.Retur0.dao.UserDaoImpl"> <property name="jdbcTemplate" ref="jdbcTemplate"/> </bean>
|
上面是使用DBCP的数据源,下面使用c3p0的数据源,区别在于数据库连接的参数的属性名不一样。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="dicerClass" value="com.mysql.jdbc.Driver"/> <property name="jdbcUrl" value="jdbc:mysql:///spring"/> <property name="user" value="root"/> <property name="password" value="123456"/> </bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.jdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean>
<bean id="userDao" class="com.Retur0.dao.UserDaoImpl"> <property name="jdbcTemplate" ref="jdbcTemplate"/> </bean>
|
JdbcDaoSupport
JdbcDaoSupport类中含有jdbcTemplate和datasource,可以简化上面的过程。
dao成继承JdbcDaoSupport:
1 2 3 4 5 6 7
| public class UserDaoImpl extends JdbcDaoSupport implements IUserDao{ @Override public void add(User user){ getJdbcTemplate().update("insertr into t_user(username,password) value(?,?);","name03","777"); } }
|
在xml中的配置就简化了:
1 2 3 4 5 6 7 8 9 10 11 12
| <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="dicerClass" value="com.mysql.jdbc.Driver"/> <property name="jdbcUrl" value="jdbc:mysql:///spring"/> <property name="user" value="root"/> <property name="password" value="123456"/> </bean>
<bean id="userDao" class="com.Retur0.dao.UserDaoImpl"> <property name="dataSource" ref="dataSource"/> </bean>
|
抽取数据库信息
在src目录下写db.properties
1 2 3 4
| driverClass=com.mysql.jdbc.Driver jdbcUrl=jdbc:mysql:///spring user=root password=123456
|
beans.xml
1 2 3 4 5 6 7 8
| <context:proterty-placeholder location="classpath:db.properties"/>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="dicerClass" value="${driverClass}"/> <property name="jdbcUrl" value="${jdbcUrl}"/> <property name="user" value="${user}"/> <property name="password" value="${password}"/> </bean>
|