Sping+DBCP connect pool+JdbcTemplate

来源:互联网 发布:铜陵行知中学 编辑:程序博客网 时间:2024/06/01 10:46

Spring的配置:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
   <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
   <property name="username" value="root"></property>
   <property name="password" value="root"></property>
   <property name="url" value="jdbc:mysql://localhost:3306/bekiz?characterEncoding=utf-8"></property>
  </bean>
  <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
   <property name="dataSource" ref="dataSource"></property>
  </bean>

需要Jar包:

<dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.21</version>
      </dependency>
     <dependency>    
      <groupId>commons-dbcp</groupId>    
      <artifactId>commons-dbcp</artifactId>    
      <version>1.4</version>
     </dependency>
     <dependency>   
      <groupId>commons-logging</groupId>   
       <artifactId>commons-logging</artifactId>    
       <version>1.1.1</version> 
    </dependency>

-------------------------------

Spring 提供了大量的模板类:JdbcTemplate、TransactionTemplate、JmsTemplate、JpaTemplate、HibernateTemplate等。

同时这些模板类还暴露了策略(回调)接口,一旦模板类本身的方法不能够满足客户需求,开发者可以使用策略接口,完成复杂的开发任务。

JdbcTemplate 暴露了如下回调接口:

下面的使用java.sql.Statement API:

1. ConnectionCallback :回调方法:doInConnection(Connection conn)

jt.execute(new ConnectCallback(){

     public Object doInConnection(Connection conn) throws SQLException,DataAccessException{

           log.info(conn.getMetaDta().getDriverName());

          return null;

   }

});

2. StatementCallback : 回调方法:doInStatement(Statement stat) : 开发者能够使用同一个Statement对象完成若干SQL的操作。-这个需要手工关闭 ResultSet对象。

3.ResultSetCallback : 回调方法:extractData(ResultSet rs ) :完成结果集的处理,开发者不用手工关闭ResultSet对象。内部对ResultSet进行了迭代,有如下的代码:

while(rs.next()){

    Person person = new Person();

    person.setName(rs.getString("name"));

    personList.add(person);

}

4.RowCallbackHandler : 回调方法:processRow(ResultSet rs):在ResultSetCallback的基础上,去掉了ResultSet的迭代。

注意:Spring为RowCallbackHandler提供了一个默认实现类:RowCountCallbackHandler,可以统计出结果集的元数据信息,比如:列明、列类型、列的数量、行的数量。 这两个类都不是线程安全的,是有状态的实例!不能在多线程环境下使用!

5.RowMapper:回调方法:mapRow(ResultSet rs,int rowNum)

  即不用迭代,又不用再回调接口中维护有状态信息。这个类是线程安全的!

Spring内置的RowMapper类有很多实现类:ColumnMapRowMapper(用于ResultSet含有若干列的场景)、SingleColumnRowMapper(用于ResultSet含有单列的场景)、

BeanPropertyRowMapper(会将结果集的每行取值映射成单个的对象)等等。

 

下面的使用java.sql.PreparedStatement API:

JdbcTemplate中暴露的使用PreparedStatment的方法,大部分含有 Object[] args参数。即这些方法的执行会采用预编译语句!

1.PreparedStatementCallback:回调方法:doInPreparedStatement(PreparedStatement pst)

2. PreparedStatementSetter 回调方法:setValues() :借助这个接口,开发者能够设置SQL中的动态参数!

3.PreparedStatementCreator:回调方法:createPreparedStatement(Connection conn):可以控制预编译语句的生成!

其他的与上面的类似。

 

执行RDBMS的存储过程:java.sql.CallableStatement API

 

原创粉丝点击