1、spring对DAO的支持
Java代码
public class AccountServiceImpl implements AccountService{
private AccountDao accountDao;
/** set方法注入 */
public void setAccountDao(AccountDao accountDao);
this.accountDao = accountDao;
}
public void insert(Account acc){
accountDao.insert(acc);
}
}
从这个类的源代码可以看出,程序所依赖的是数据访问接口。因此,可以随时更换AccountDao的实现类。Spring的DAO框架正式基于这样的基本原理来将应用程序与底层数据存取技术解耦的。
2、数据源的注入
对数据库数据执行任何的存取操作,必须要有数据源,spring提供了javax.sql,DataSource注入,这样在需要更换数据源时只需要在spring配置文件中修改即可。而不需要修改程序代码。
不同的应用系统可能使用不同的数据源。
2.1、不带连接池的数据源
Xml代码
<!-- 配置不带连接池的数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql:///spring" />
<property name="username" value="root" />
<property name="password" value="123>
</bean>
<bean id="accountDao" class="com.zxf.dao.AccountDaoImpl">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="accountService" class="com.zxf.service.AccountService">
<property name="accountDao" ref="accountDao"/>
</bean>
2.2、集成第三方连接池技术的数据源
第一种方式所获取的数据源是不带连接池的,不适合正式的商业使用。正式的商业应用需要使用带连接池的数据源,比较常见的第三方连接池有:DBCP和C3P0。
要想使用第三方的连接池技术,首先需要在项目类路径下添加它的类库。
commons-dbcp.jar 和 commons-pool.jar.
Xml代码
<!-- 配置DBCP的数据源 -->
<bean id="dataSource2"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///spring" />
<property name="username" value="root" />
<property name="password" value="123" />
</bean>
<!-- 配置C3P0的数据源 -->
<bean id="dataSource3"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql:///spring" />
<property name="user" value="root" />
<property name="password" value="123”/>
</bean>
备注:若要使用分散配置设置数据库的连接的话,可以使用分散配置。在配置数据源的是代码前面配置一下的代码。
Xml代码
<!-- 分散配置 -->
<context:property-placeholder location="jdbc.properties"/>
举例:
<!-- 驱动程序 -->
<property name="driverClass">
<value>${jdbc.driverClass}</value>
</property>
<!-- 连接的url地址 -->
<property name="jdbcUrl">
<value>${jdbc.url}</value>
</property>
<!-- 连接的用户名 -->
<property name="user">
<value>${jdbc.user}</value>
</property>
<!-- 连接的用户名的密码 -->
<property name="password">
<value>${jdbc.password}</value>
</property>
<!-- 最大池数 -->
<property name="maxPoolSize">
<value>${c3p0.pool.max}</value>
</property>
<!-- 最小池数 -->
<property name="minPoolSize">
<value>${c3p0.pool.min}</value>
</property>
<!-- 默认的初始化的池数 -->
<property name="initialPoolSize">
<value>${c3p0.pool.init}</value>
</property>
Properties代码
下面是jdbc.properties
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/spring
jdbc.user=root
jdbc.password=123
c3p0.pool.max=10
c3p0.pool.min=3
c3p0.pool.init=5