本次项目使用mySql数据库,需引入c3p0和mySql的jar包。
声明数据源:
<!--数据源-->
<bean id="dataSourceXdj2" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="${jdbc.driverClass}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="maxStatements">
<value>0</value>
</property>
<property name="maxIdleTime">
<value>1800</value>
</property>
<property name="initialPoolSize">
<value>5</value>
</property>
<property name="minPoolSize">
<value>5</value>
</property>
<property name="maxPoolSize">
<value>5</value>
</property>
<property name="acquireRetryAttempts">
<value>0</value>
</property>
</bean>
引入配置文件
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
<property name="fileEncoding" value="UTF-8"/>
</bean>
jdbc.properties内容如下:
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.1.125:3306/test?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=root
然后建立事务管理器,结合第三章讲到的事务管理,使用到之前定义的数据源:
<!-- 事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref local="dataSourceXdj2"/>
</property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
然后配置jdbc模板,同样用到之前定义的数据源:
<!-- 配置Jdbc模板 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
autowire="byName">
<property name="dataSource">
<ref bean="dataSourceXdj2" />
</property>
</bean>
<context:component-scan base-package="com.deity.xdj2.daos.impl" /><!--扫描dao类,对应被@Repository的类-->
在编写代码时,首先定义一个dao抽象类并且继承JdbcDaoSupport,所有dao都要继承这个抽象类
abstract class AbstractDao extends JdbcDaoSupport {
...
@Resource
public void setJb(JdbcTemplate jb) {
super.setJdbcTemplate(jb);
}
...
}
注意setJb方法,将jdbcTemplate注入到父类中。原因是,刚才提到的抽象类会继承JdbcDaoSupport这个类,打开 JdbcDaoSupport 的源代码会发现,此类中需要一个 jdbcTemplate。仔细看了源码会发现,注入一个dataSource也是可以的。那么现在的问题是怎么注入?分析一下Spring的注入,它是根据Set方法来注入的,父类有jdbcTemplate属性,私有的,但是有公用的get和set方法,那么想当与子类也有了这两个方法。所以就先注入到子类,再利用父类的set方法注入进去。否则会报一个叫:"'dataSource' or 'jdbcTemplate' is required"的错误。
dao实现示例:
@Repository("roleDao")
public class RoleDaoImpl extends AbstractDao implements RoleDao {
@Override
public Role findRoleByRoleId(String roleId) {
String sql = "select * from tb_role where role_id=?";
return queryForSingleton(sql, Role.class, new Object[] { roleId });
}
}