`

Spring对JDBC封装时使用的一种CallBack来参数化一个操作的模式

    博客分类:
  • JAVA
阅读更多

Spring对JDBC的封装避免了大量的JDBC低级操作,简化了代码,下面我们看看Spring除
了使用Template方法模式来简化我们编写的代码还是用了什么技巧。Spring使用了一种
叫做CallBackHandler的接口,你可以很容易扩展这个接口来获得想要查询到的结果,下
面举一个获得行信息的一个CallBackHandler,然后StringHandler实现获取查询到的String
的例子:

interface  RowCallBackHandler ... {
    
public   void   abstract  processRow(ResultSet rs) throws  SQLException;
}


class  StringHandler  implements  RowCallBackHandler ... {
    
private  List list;
    
public   void  processRow(ResultSet rs) throws  SQLException; ... {
        list.add(rs.getString(
1 ));
    }

    
    
public  String[] getStrings() ... {
    
return  (String[])list.toArray( new  String[list.size()]))
    }

}


public   class   JdbcTemplate ... {
    
// ...other code
     public  query(String sql,RowCallBackHandler callBackHandler) ... {
        Connection con 
=   null ;
        PreparedStatement ps 
=   null ;
        ResultSet rs 
=   null ;
        
try ... {
            
//  con = <code to get connetion>
            ps  =  con.prepareStatement(sql);
            rs.executeQuery();
            
while (rs.next()) ... {
                callBackHandler.processRow(rs);
            }

            rs.close();
            ps.close();
        }
catch (SQLException e) ... {
            e.printStackTrace();
        }
finally ... {
            DataSourceUtils.closeConnectonIfNecessary(
this .dataSource,con);
        }

    }

}


public   class  SimpleTest ... {
    
public   static   void  main(String []args) ... {
        StringHandler sh 
=   new  StringHandler();
        JdbcTemplate jdbcTemplate 
=   new  JdbcTemplate();
        jdbcTemplate.query(
" Select firstName from user " ,sh);
        String []str 
=  sh.getStrings();
    }

}

 

这个模式关键的技巧是参数一个操作并JdbcTemplate中主动调用方法processRow(),将结
果集中的信息添加到List中,这个可以说一种控制反转的思想。查询的结果是在查询过程中
自动注入到我们的要接收查询结果的容器中的,用户不需要关心如何去获得查询结果,当需
要结果是只需要getStrings()获得。
用户只需要使用如下代码:
StringHandler sh = new StringHandler();
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.query("Select firstName from user",sh);
String []str = sh.getStrings();
就可以轻易获得查询的结果。
不过这个模式可以说更多的是一种技巧,直观程度不够,从而使代码不容易理解和维护。

分享到:
评论

相关推荐

    Spring源代码解析(三):Spring_JDBC.doc

    在Spring框架中,Spring JDBC是核心模块之一,它提供了一种简单且强大的方式来处理数据库交互。本篇文章将深入解析Spring JDBC的实现,特别是JdbcTemplate类。JdbcTemplate是Spring为简化数据库操作而设计的一个模板...

    okhttp的两种callback封装

    而异步请求则通过`enqueue`方法,传入一个实现了`Callback`接口的对象来处理结果。 1. **返回String类型的Callback封装** 这种封装方式适用于数据格式不固定,需要在子类根据业务需求进行自定义解析的情况。首先,...

    基于鸿洋okhttputils 封装数据 bean和callback 回调

    OkHttp是一个高效的HTTP客户端库,而OkHttpUtils是由知名Android开发者鸿洋(Hongyang)基于OkHttp进行封装的一个工具库,它简化了OkHttp的使用,使其更符合Android开发者的习惯。本主题主要探讨的是如何基于鸿洋的...

    Spring源代码解析3:SpringJDBC[归纳].pdf

    在Spring框架中,Spring JDBC是用于简化数据库操作的重要模块,主要通过`JdbcTemplate`类提供了一种方便、灵活且易于使用的API。`JdbcTemplate`设计的核心理念是模板方法模式,它将通用的数据库操作逻辑封装起来,而...

    Cython封装Callback函数 示例

    在Python编程中,回调函数是一种常见的编程模式,它允许我们将一个函数作为参数传递给另一个函数,在特定条件下由被调用的函数执行。Cython是一种优化Python代码的工具,它可以将Python代码转换为C语言,从而提高...

    spring、ioc、aop、callback

    Spring 框架是 Java 开发中的一个核心组件,它为开发者提供了丰富的功能,包括依赖注入(IOC)、面向切面编程(AOP)以及回调机制。让我们深入了解一下这些概念。 **Spring IOC(Inversion of Control,控制反转)*...

    匿名进程内操作的使用方法DLL_Callback.zip_callback_匿名

    回调函数是一种设计模式,允许我们将一个函数作为参数传递给另一个函数,这样在特定条件满足时,被传递的函数可以被调用。在Windows API中,回调函数通常用于处理事件、异步操作或数据处理等场景。它们是实现进程间...

    设计模式Callback介绍与实例

    回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机。回调函数包含下面几个特性: &gt;属于工作流的一个部分; &gt;必须按照...

    死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理(csdn)————程序.pdf

    `Enhancer` 是 CGLIB 的核心类,用于创建代理对象,而 `Callback` 是一个回调接口,它定义了代理对象在方法调用时需要执行的操作。在 Spring AOP 中,`ObjenesisCglibAopProxy` 类负责使用 CGLIB 创建代理对象,它会...

    JdbcTemplate教程

    除了大量使用Template Method来封装一些底层的操作细节,spring也大量使用callback方式类回调相关类别的方法以提供JDBC相关类别的功能,使传统的JDBC的使用者也能清楚了解spring所提供的相关封装类别方法的使用。

    【Java 设计模式-源码】Callback 模式:掌握异步通信

    Callback 设计模式的一个现实世界类比可以在餐饮业中找到。想象一下,你在一家繁忙的餐厅下单。你不是在柜台等待食物准备好,而是向收银员提供你的电话号码。一旦你的订单准备好,厨房工作人员会打电话或发短信通知...

    59丨模板模式(下):模板模式与Callback回调函数有何区别和联系?1

    模板模式的主要特点在于其结构固定,定义了一个操作流程,并在关键点提供了抽象方法或钩子,由子类去实现这些方法以定制特定的行为。这种方式有助于保持代码结构清晰,降低耦合度,同时也便于扩展。在框架开发中,...

    CallBack_DEMO 回调

    这种设计模式在处理异步操作时非常有用,因为它允许我们定义一个函数来处理操作完成后的结果,而不会阻塞主程序的执行流程。 在描述中提到的链接(由于无法直接访问,以下内容基于对回调机制的一般理解进行解释)...

    回调技术(CallBack)源码

    回调函数是一种代码执行模式,允许一个函数或方法在特定事件发生时被另一个函数调用。这种机制使得程序能够以非阻塞的方式处理任务,提高效率并优化资源管理。 回调的基本原理是将一个函数作为参数传递给另一个函数...

    用友U9客户化开发 Callback & Postback 入门 v0.8

    在用友U9客户化开发中,Callback 是一个非常重要的技术。 Postback 则是一种提交表单的方式,通过POST请求将表单数据提交到服务器端。它可以实现页面的部分刷新,但与Callback 相比,Postback 需要刷新整个页面。 ...

    Callback

    回调函数是一种设计模式,它允许我们将一个函数作为参数传递给另一个函数,然后在特定条件满足时由那个函数调用。在C#中,这通常通过委托(Delegate)或事件(Event)来实现。在本例的Service服务程序中,回调可能被...

    VC++ CALLBACK

    在Microsoft Visual C++(简称VC++)编程中,回调函数是一种机制,允许我们传递一个函数作为参数给另一个函数,然后在需要的时候由这个接收函数调用我们传入的函数。这种功能在处理异步操作、事件驱动编程或者在库和...

    Spring JdbcTemplate api

    在Spring框架中,`JdbcTemplate`是一个用于简化JDBC编程的工具类,它采用了模板模式来分离数据库访问中的不变和可变部分,提供了一种更加健壮且易于使用的数据访问机制。`JdbcTemplate`负责处理资源的获取、关闭以及...

    unigui_ajax Post Callback -返回参数 HTMLFrame 事件_1

    "unigui_ajax Post Callback - 返回参数 HTMLFrame 事件_1"是一个关于Unigui中使用Ajax进行异步数据交互的专题,主要关注如何处理POST请求的回调以及与HTMLFrame相关的事件。 Ajax(Asynchronous JavaScript and ...

    C++中回调(CallBack)的使用思路

    回调(Callback)是一种重要的编程模式,在C++中广泛应用于多种场景,尤其是处理事件驱动或异步操作时。简单来说,回调是一种将函数作为参数传递给另一个函数的方式,这样被调用的函数可以在适当的时候执行传入的...

Global site tag (gtag.js) - Google Analytics