君子博学而日参省乎己 则知明而行无过矣

博客园 首页 新随笔 联系 订阅 管理

Spring对JDBC的抽象和对Hibernate的集成,都采用了一种理念或者处理方式,那就是模板方法模式与相应的Callback接口相结合。

 

 采用模板方法模式是为了以一种统一而集中的方式来处理资源的获取和释放,以JdbcTempalte为例,如下:

 

Java代码  收藏代码
  1. public abstract class JdbcTemplate {  
  2.         
  3.       public final Object execute(String sql){  
  4.             Connection con=null;  
  5.             Statement stmt=null;  
  6.              try  
  7.              {  
  8.                  con=getConnection();  
  9.                  stmt=con.createStatement();  
  10.                  Object retValue=executeWithStatement(stmt,sql);  
  11.                  return retValue;  
  12.              }  
  13.              catch(SQLException e){  
  14.                  ...  
  15.              }  
  16.              finally  
  17.              {  
  18.                closeStatement(stmt);  
  19.                releaseConnection(con);  
  20.              }  
  21.        }  
  22.   
  23.        protected abstract Object executeWithStatement(Statement   stmt, String sql);  
  24. }  

   这样处理之后,JDBC代码的使用得到了规范,连接释放等问题也得到了统一的管理。

  但是,JdbcTemplate是抽象类,不能够独立使用,我们每次进行数据访问的时候都要给出一个相应的子类实现,这样肯定不方便,所以就引入了回调。

Java代码  收藏代码
  1. public interface StatementCallback{  
  2.       Object doWithStatement(Statement stmt);  
  3. }  

  

 

Java代码  收藏代码
  1. public class JdbcTemplate {  
  2.         
  3.       public final Object execute(StatementCallback callback){  
  4.             Connection con=null;  
  5.             Statement stmt=null;  
  6.              try  
  7.              {  
  8.                  con=getConnection();  
  9.                  stmt=con.createStatement();  
  10.                  Object retValue=callback.doWithStatement(stmt);  
  11.                  return retValue;  
  12.              }  
  13.              catch(SQLException e){  
  14.                  ...  
  15.              }  
  16.              finally  
  17.              {  
  18.                closeStatement(stmt);  
  19.                releaseConnection(con);  
  20.              }  
  21.        }  
  22.   
  23.        ...//其它方法定义  
  24. }  

 

使用如下:

 

Java代码  收藏代码
  1. JdbcTemplate jdbcTemplate=...;  
  2. final String sql=...;  
  3. StatementCallback callback=new StatementCallback(){  
  4.       public Object=doWithStatement(Statement stmt){  
  5.              return ...;  
  6.       }  
  7. }  
  8.   
  9. jdbcTemplate.execute(callback);  
posted on 2012-09-06 23:27  刺猬的温驯  阅读(2905)  评论(0编辑  收藏  举报