日期:2014-05-16  浏览次数:20588 次

Spring与JDBC整合、事务处理

Spring的配置文件

<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"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<context:component-scan base-package="action,biz,dao"/>
</beans>

配置数据源

<bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
    <property name="username" value="bam1"/>
    <property name="password" value="bam1"/>
     <!-- 连接池启动时的初始值 -->
     <property name="initialSize"value="1"/>
     <!-- 连接池的最大值 -->
     <property name="maxActive"value="500"/>
     <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
     <property name="maxIdle"value="2"/>
     <!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请一些连接,以避免洪峰来时再申请而造成的性能开销 -->
     <property name="minIdle"value="1"/>
  </bean>
Spring容器中给我们提供了专门针对JDBC操作的辅助类,需要使用注入的方式给JDBC辅助类注入数据源对象,在XML文件中进行添加如下代码:
  <bean id="jdbc" class="org.springframework.jdbc.core.JdbcTemplate">
    <constructor-arg ref="dataSource"></constructor-arg>
    //注入数据源对象需要使用构造函数的方法注入,第三方类需要手动注入
  </bean>

实体类Person

public class Person
{
   private int personId;
   private String personName;
}

DAO层数据操作类

@Repository
public class PersonDaoImpl implements PersonDao
{
    @Resource(name="jdbc") //注入的第三方的bean需要指明name设置
    private JdbcTemplate jdbc;
    @Override
    public int add(Person per)
    {   //update执行数据库操作
       return jdbc.update("insert intoperson(pid,pname) values(?,?)",per.getPersonId(),per.getPersonName());
    }
    @Override
    public Person queryById(int id)
    {  //queryForObject执行数据库查询操作查询一个
       return jdbc.queryForObject("select* from person where pid=?",new Object[]{id}, new PersonRowMapper());
    }
    @Override
    public List<Person> queryAll()
    {   //query查询多个
       return jdbc.query("select* from person",new PersonRowMapper());   // PersonRowMapper为RowMapper的实现类
    }
}

实现RowMapper接口的实现类

public class PersonRowMapper implementsRowMapper<Person>
{
    @Override
    public Person mapRow(ResultSet set, int index) throws SQLException
    {
       return  new Person(set.getInt("pid"),set.getString("pname"));
    }
}

Spring容器获取Bean的工具类编写

public class BeanUtil {
    private static AbstractApplicationContext app;
    static {
       app = new ClassPathXmlAppl