五、Spring数据库操作
1.Spring+JDBC
(1)特点
静态代码+动态变量 = jdbc编程。在spring中动态变量可以用注入的形式给予,这样的编程方式适合包装成模版,
静态代码构成了模版,而动态变量则是需要传入的参数.
(2)引入DataSource
在spring中注入DataSource,一般采用c3p0
(3)核心类JdbcTemplate
* 它是基于模版的设置
* 完成了资源的创建和释放的工作
* 简化为我们对JDBC的操作
* 完成了对JDBC的核心流程的工作,包括SQL语句的创建和执行
* 仅需要传递DataSource就可以把它实例化
* JdbcTemplate只需要创建一次
* JdbcTemplate是线程安全类
(4)使用JdbcTemplate
在Dao类中,用JdbcTemplate作为属性,用spring对JdbcTemplate进行注入.
再对jdbcTemplate进行DataSource注入.
(5)继承JdbcDaoSupport
在Dao类中,继承JdbcDaoSupport,因为JdbcDaoSupport已经有了jdbcTemplate的引用,所以
只要继承jdbcDaoSupport就相当于有了jdbcTemplate属性.
(6)使用properties文件
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>jdbc.properties</value>
</list>
</property>
</bean>
或者
<context:property-placeholder location="classpath:jdbc.properties" />
jdbc.properties文件中配置连接信息
jdbc.driverclass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/databasename
jdbc.username=root
jdbc.password=root
c3p0.pool.size.max=10
c3p0.pool.size.min=2
c3p0.pool.size.ini=3
c3p0.pool.size.increment=2
(7)RowMapper的使用
* 由来: 在jdbc的操作中,有很多情况下是要将ResultSet里的数据封装到一个持久化Bean里,再把持久化
Bean封装到集合中,这样会造成大量的代码的重复,不利于代码重用.而RowMapper正好解决这个问题.
* 使用:
首先,写一个类实现RowMapper接口
public class AccountMapper implements RowMapper {
public Object mapRow(ResultSet rs, int rowNum) throws SQLException{
Account account = new Account();
account.setAccountid(ts.getString("accountid"));
account.setBalance(rs.getDouble("balance"));
return account;
}
}
其次,在回调接口中,作为参数进行传入即可
this.getJdbcTemplate().query(sql,new AccountMapper());
(8)Spring的事务管理器
* spring事务管理器介绍
spring没有直接管理事务,而是将管理事务的责任委托给JTA或响应的持久性机制所提供的某个特定平台的事务实现
org.springframework.jdbc.datasource.DataSourceTransactionManager
在单一的JDBC Datasource中的管理事务
org.springframework.orm.hibernate3.HibernateTransactionManager
当持久化机制是hibernate时,用它来管理事务》
org.springframework.jdo.JdoTransactionManager
当持久化机制是Jdo时,用它来管理事务
org.springframework.transaction.jta.JtaTransactionManager
使用一个JTA实现来管理事务,在一个事务跨越多个资源时必须使用
org.springframework.orm.ojb.PersistenceBrokerTransactionManager
当apache的ojb用作持久化机制时,用它来管理事务.
(9)spring事务的配置
* 以xml配置的形式(***号表示需要引入的名称空间)
[html]
<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:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd