Spring通过注解配置c3p0连接池和dao使用 jdbcTemplate
1.Spring配置c3p0连接池
第一步:导入c3p0的jar包
第二步:创建Spring配置文件,配置连接池
平常我们写c3p0连接池时是这样写的:
ComboPooledDataSource dataSource=new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/template");
dataSource.setUser("root");
dataSource.setPassword("");
现在有了Spring后,我们就通过Spring的容器(IOC思想,控制反转)来进行JavaBean的对象管理。
Spring的配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 配置c3p0连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 注入属性值 -->
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/template"></property>
<property name="user" value="root"></property>
<property name="password" value=""></property>
</bean>
</beans>
2.在dao层,使用jdbcTemplate
既然在dao层里面使用jdbcTemplate。那么现在就定义一个完整的,结构,包括dao层,service层的例子:
dao层:
//通过注解方式创建对象,对象被Spring管理。
@Component(value="userDao")
public class UserDao {
//注解方式注入对象
@Resource(name="jdbcTemplate")
private JdbcTemplate jdbcTemplate;
public User showUser(String name){
User user=jdbcTemplate.queryForObject("select * from user where name=?", new RowMapper<User>(){
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user=new User(rs.getString("name"), rs.getString("password"));
return user;
}}, name);
return user;
}
}
service层:
//通过注解方式创建对象,对象被Spring管理。
@Service(value="userService")
public class UserService {
//通过注解方式注入对象
@Resource(name="userDao")
private UserDao userDao;
public User showUser(String name){
return userDao.showUser(name);
}
}
Spring的核心配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 开启JavaBean注释扫描 -->
<context:component-scan base-package="cn.domarvel"></context:component-scan>
<!-- 创建c3p0连接池对象,并且初始化c3p0连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/template"></property>
<property name="user" value="root"></property>
<property name="password" value=""></property>
</bean>
<!-- 创建jdbcTemplate,并且通过IOC的依赖注入的构造注入方式注入c3p0连接池对象,那么获取到jdbcTemplate后就能够直接使用 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg name="dataSource" ref="dataSource"></constructor-arg>
</bean>
</beans>
这里要注意一点:当我们是构造注入的时候,这里的name属性的值为构造函数传参那里定义的名称,而不是成员变量的名称。
比如我这里是用的JdbcTemplate的有参构造方法。
//这是JdbcTemplate的构造函数源代码
public JdbcTemplate(DataSource dataSource) {
setDataSource(dataSource);
afterPropertiesSet();
}
因为传参的地方参数名为dataSource所以,在Spring的核心配置文件中name属性值也是dataSource
现在讲讲上面的实现逻辑:
我想通过JdbcTemplate实现查找信息,里面的连接池用的是c3p0.
我定义了一个UserDao类,目的是为了查找数据库里面User的具体信息。
要想在UserDao里面使用JdbcTemplate,就必须先创建好c3p0连接池,创建c3p0连接池在Spring核心配置里面完成,有了c3p0连接池后就开始创建JdbcTemplate,创建JdbcTemplate是通过构造方法注入c3p0连接池对象的。JdbcTemplate创建好后,就在UserDao里面定义好JdbcTemplate,并且注入JdbcTemplate对象,注入后就能够通过JdbcTemplate对象查找数据库的信息了。后面就是通过注解方式创建UserDao,创建UserService,并且在UserService里面注入UserDao并且使用了。使用注解方式创建JavaBean对象还要开启JavaBean注解扫描。