Spring通过XML配置c3p0连接池和dao层注解注入使用 jdbcTemplate

来源:互联网 发布:网络用语蛤蟆啥意思 编辑:程序博客网 时间:2024/05/16 15:55

Spring通过注解配置c3p0连接池和dao使用 jdbcTemplate

1.Spring配置c3p0连接池

第一步:导入c3p0的jar包

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注解扫描。

1 1
原创粉丝点击