Spring JDBC模版以及三种数据库连接池的使用
jar包版本有点乱,直接忽略版本号,将就一下。
这里引了aop包是因为在spring3版本之后用模版对数据库库操作时会出现问题,但是不会报错,也没有提示。
所以这里直接引入,以及之后会用到的DBCP与C3P0连接池jar包等。
接着先在spring配置文件中配置连接池和模版
这里使用的是Spring的内置连接池
<!-- 引入属性文件 --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置Spring内置的连接池 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!-- 引入属性文件的值 --> <property name="driverClassName" value="${jdbc.driverClassName}"></property> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!-- 配置spring的JDBC的模版 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean>
也可以用第二种 数据库连接池DBCP
<!-- 引入属性文件 --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置DBCP连接池 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <!-- 引入属性文件的值 --> <property name="driverClassName" value="${jdbc.driverClassName}"></property> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!-- 配置spring的JDBC的模版 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean>
还可以用第三种 C3P0连接池
<!-- 引入属性文件 --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置C3P0连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 引入属性文件的值 --> <property name="driverClass" value="${jdbc.driverClassName}"></property> <property name="jdbcUrl" value="${jdbc.url}"></property> <property name="user" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!-- 配置spring的JDBC的模版 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean>
这里注意C3P0连接池的属性名与其他连接池的属性名不一样。
使用JDBC的模板:保存数据
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class jdbcDemo1 { @Resource(name="jdbcTemplate") private JdbcTemplate jdbcTemplate; @Test public void demo() { jdbcTemplate.update("insert into account values (null,?,?)","加一",10000d); } }
这里直接引用了@Resource(name="jdbcTemplate")完成了属性的注入,是因为引入了test的jar包了,这种注入只能在单元测试中使用,否则要在普通类中使用这种方法,必须在spring配置中开启<context:component-scan>注解扫描。
这里顺便总结一下两种开启注解扫描方式的异同点:
<context:annotation-config>:注解扫描是针对已经在Spring容器里注册过的Bean
<context:component-scan>:不仅具备了<context:annotation-config>的所有功能,还可以在指定的package下面扫描对应的bean。