Commons DbUtils源码阅读二

DbUtils组件的整个代码结构做了一个简单的疏导,现在来看看一些比较核心的接口:

   1)RowProcessor

      

Java代码   收藏代码
  1. /** 
  2.  * RowProcessor的实现类将ResultSet转换为其它的各种对象. 
  3.  * 具体的实现细节可查看:BasicRowProcessor 
  4.  */  
  5. public interface RowProcessor {  
  6.   
  7.     /** 
  8.        * 通过指定有效的ResultSet对象,创建一个Object[]. 
  9.        * ResultSet在传入这个方法之前,必须指定一个有效的位置, 
  10.      * 这个方法的实现必须不能改变ResultSet的行位置 
  11.      * @param rs 要转换为数组的ResultSet 
  12.         * @throws SQLException 数据访问异常 
  13.      * @return 创建的一个新的数组 
  14.      */  
  15.     public Object[] toArray(ResultSet rs) throws SQLException;  
  16.   
  17.     /** 
  18.        * 通过指定有效的ResultSet,创建一个JavaBean实例. 
  19.        * ResultSet在传入这个方法之前,必须指定一个有效的位置, 
  20.      * 这个方法的实现必须不能改变ResultSet的行位置 
  21.      * @param <T> 创建的bean的类型 
  22.      * @param rs 同上 
  23.      * @param type 创建bean实例的类  
  24.      * @throws SQLException 同上 
  25.      * @return 创建的一个新的实例对象 
  26.      */  
  27.     public <T> T toBean(ResultSet rs, Class<T> type) throws SQLException;  
  28.   
  29.     /** 
  30.        * 通过遍历ResultSet,创建一个bean集合, 
  31.      * 在执行这个方法之前,不能调用ResultSet.next()方法。 
  32.      * @param <T> 同上 
  33.      * @param rs 同上 
  34.      * @param type 同上 
  35.      * @throws SQLException 同上 
  36.      * @return 指定类型的bean集合 
  37.      */  
  38.     public <T> List<T> toBeanList(ResultSet rs, Class<T> type) throws SQLException;  
  39.   
  40.     /** 
  41.        * 将指定的ResultSet行转换为一个Map。 
  42.      * 必须指定一个有效的位置传入该方法. 
  43.        * 该方法的实现必须保证不改变ResultSet的行位置 
  44.      * @param rs 同上 
  45.      * @throws SQLException 同上 
  46.      * @return 新创建的Map集合 
  47.      */  
  48.     public Map<String, Object> toMap(ResultSet rs) throws SQLException;  
  49.   
  50. }  

    这个呢,是 DbUtils组件核心接口之一,也就是真正解析java.sql.ResultSet的接口,当然了,真正做事情的是它的实现类了:BasicRowProcessor,这个类的分析下一节再说,再来看看另一个重要的接口:

   2)ResultSetHandler<T>

   

Java代码   收藏代码
  1. /** 
  2.  * 该接口实现类将java.sql.ResultSet转换为其它的对象 
  3.  */  
  4. public interface ResultSetHandler<T> {  
  5.   
  6.     /** 
  7.      *  
  8.      * 将java.sql.Result转换为一个对象 
  9.      *  
  10.      * @param rs 待转换的java.sql.ResultSet 
  11.      *  
  12.      * @return java.sql.ResultSet转换的对象. 
  13.      *    如果ResultSet为空,刚返回一个null 
  14.      *  
  15.      * @throws SQLException 数据访问异常 
  16.      */  
  17.     public T handle(ResultSet rs) throws SQLException;  
  18.   
  19. }  

  看看这两个接口的说明,有点奇怪对不对,为什么这两个类都说将一个java.sql.ResultSet转换为其它对象呢?

  实际上呢,如果你提前看过了它们的实现类,那么你可能就不会那么奇怪了,RowProcessor这个接口,顾名思义啊,它是处理java.sql.ResultSet中单个行的数据的,而我们的数据集怎么可能是只有一条呢,所以,要处理所有的ResultSet里面的数据怎么办?OK,对,ResultSetHandler<T>,如果你对ResultSetHandler<T>的实现类目堵过,那么,你就不难发现,RowProcessor是ResultSetHandler<T>的成员变量,也可以理解为ResultSetHandler<T>的实现类是RowProcessor的包装类。

  有点明目没?!

  下一节,具体来看里面的实现


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值