jdbcTemplate中Callback的三个实现
工作中遇到外键关联的联表查询,采用jdbcTemplate的query来实现,需对返回ResutlSet自行进行组装,故研究了下Callback三个接口实现。
三种实现分别是ResultSetExtracor、RowMapper、RowCallbackHanlder,借用网上的一个例子(查询顾客信息)来阐述用法。
List<Customer> customerList = (List<Customer>)jdbcTemplate.query("select * from customer", new ResultSetExtractor(){ public Object extractData(ResultSet rs) throws SQLException,DataAccessException { List<Customer> customers = new ArrayList<Customer>(); while(rs.next()){ Customer customer = new Customer(); customer.setFirstName(rs.getString("fristname")); customer.setLastName(rs.getString("lastname")); customers.add(customer); } return customers; }); } List<Customer> customerList = jdbcTemplate.query("select * from customer", new RowMapper(){ public Object mapRow(ResultSet rs, int rowNumber) throws SQLException { Customer customer = new Customer(); customer.setFirstName(rs.getString("firstname")); customer.setLastName(rs.getString("lastname")); return customer; }); } final List<Customer> customerList = new ArrayList<Customer>(); jdbcTemplate.query("select * from customer", new RowCallbackHandler(){ public void processRow(ResultSet rs) throws SQLException { Customer customer = new Customer(); customer.setFirstName(rs.getString("firstname")); customer.setLastName(rs.getString("lastname")); customerList.add(customer); }); }
从代码中看,ResultSetExtractor与其他两种方法相比,需自己对结果集遍历,这同时也给了一个权限。游标的位置isBforeFisrt()是true,可通过res.next(),取得所有返回数据;
RowMapper中的rowMapper是对单条的处理,游标的位置isBeforeFisrt()是false,每一次操作,都对应一条数据,且返回的是每一条处理结果的对象;
RowCallbackHanlder中的processRow也是对单条处理,游标的位置isBeforeFisrt()是false,因为没有返回值,操作结果只能通过final传回上层。
在联表查询返回时,需对数据重新组装,直接采用ResultSetExtractor可以解决问题,但要注意数据组装的细节。用RowCallbackHanlder也可达到同样的效果,但需采用PreparedStatementCreator,使结果集可回滚,将游标定位到beforeFirst,再通过res.next()处理。
相关推荐
用友U9客户化开发 Callback & Postback 入门 v0.8 用友U9客户化开发 Callback & Postback 入门 v0.8 是一份关于用友U9客户化开发中 Callback 和 Postback 的基础知识入门文档。该文档详细介绍了 Callback 和 ...
本篇文章将详细解释如何在C语言环境中使用protobuf-c处理`repeated`字段,创建数组和字符串,并特别关注`pb_callback_t`这一特殊类型。 首先,我们需要理解`repeated`字段在protobuf语义中的含义。在protobuf的定义...
本文实例分析了C++中回调函数(CallBack)的用法。分享给大家供大家参考。具体分析如下: 如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过。 其错误是普通的C++成员函数都隐含了一个传递...
在提供的压缩包文件中,如`mainwindow.cpp`和`main.cpp`,可能包含了具体的信号槽连接示例,而`mainwindow.ui`则是Qt Designer生成的用户界面文件,`callback.pro`和`callback.pro.user`则是项目配置文件,它们共同...
typedef void (*callback_t)(int); ``` 2. **实现回调函数**:接着,定义一个具体的回调函数,实现所需的功能。例如,处理接收到的信号: ```c void handle_signal(int signum) { // 处理信号的逻辑 } ``` ...
本主题主要探讨的是如何基于鸿洋的OkHttpUtils进行数据Bean的封装以及Callback回调的处理。 首先,我们来理解一下OkHttpUtils的核心概念。OkHttpUtils提供了一系列静态方法,如`get()`, `post()`等,用于发起HTTP...
回调(Callback)是一种在软件设计模式中常见的编程概念,它允许一个函数或对象在完成某个操作后通知另一个函数或对象。在本示例"CallBack_DEMO"中,我们可能正在探讨如何在Java或其他编程语言中实现回调机制。回调...
本文将详细介绍如何在 C# 环境下利用 Halcon 的外触发机制来实现图像采集,并通过 `get_framegrabber_callback` 函数注册回调函数的方法。 #### 二、Halcon 外触发机制介绍 在实际应用中,很多时候我们需要根据...
本文将深入探讨如何利用OkHttp进行网络请求,并封装两种Callback处理方式:一种是返回String类型,后续在子类进行JSON解析;另一种则是直接传入泛型的JavaBean,完成解析后再传回子类。 首先,了解OkHttp的基本用法...
**C# WCF CallBack Demo** Windows Communication Foundation (WCF) 是.NET Framework中用于构建分布式应用程序的服务模型。在WCF中,回调(Callback)是一种高级通信模式,它允许服务主动向客户端发送数据,而不...
回调技术(Callback)是软件设计模式中的一种,它在异步编程或事件驱动编程中扮演着重要角色。回调函数是一种代码执行模式,允许一个函数或方法在特定事件发生时被另一个函数调用。这种机制使得程序能够以非阻塞的...
本示例中,我们将探讨如何在VC中调用由Delphi编写的动态链接库(DLL),特别是涉及到类的传递以及回调(callback)机制。在Delphi中创建DLL,然后在VC或C#中调用,可以利用Delphi的强大面向对象特性,并将其集成到...
在编程领域,回调函数(Callback)是一种常见的设计模式,它允许我们将一个函数作为参数传递给另一个函数,以便在特定事件发生或某个操作完成后被调用。这种机制在异步编程和事件驱动编程中尤其重要。易语言,是中国...
在“Post Callback”部分,我们讨论的是当Ajax POST请求完成后执行的回调函数。这个回调函数通常用来处理服务器返回的数据,如解析JSON,更新UI,或者处理错误信息。理解如何正确编写和使用回调函数是确保Ajax请求...
回调(Callback)在MIDAS中扮演了关键角色,它是实现客户端对服务器端数据处理结果的响应机制。 回调机制允许客户端注册一个函数或方法,当服务器完成特定操作后,会调用这个预注册的函数或方法。这样,客户端就能...
在ASP.NET 2.0中,引入了一种新的技术,即客户端回调(Client Callback)机制,也称为 Partial Page Rendering 或 UpdatePanel,这使得开发者能够实现无刷新页面更新,提高用户体验。 客户端回调机制的核心是通过...
**VC++ CALLBACK** 在Microsoft Visual C++(简称VC++)编程中,回调函数是一种机制,允许我们传递一个函数作为参数给另一个函数,然后在需要的时候由这个接收函数调用我们传入的函数。这种功能在处理异步操作、...
在物联网和硬件工程领域,尤其是涉及新能源汽车的嵌入式系统设计中,了解回调(callback)和呼叫出(callout)函数的概念及其应用至关重要。AUTOSAR(AUTomotive Open System ARchitecture)是一种开放的汽车行业软件...
回调函数Callback是JNI中一个重要的概念,它使得Java层能够调用C/C++的函数,反之亦然。 **JNI基础** 1. **JNI接口定义**:在Java代码中,通过`native`关键字声明本地方法。这些方法没有具体实现,而是通过JNI接口...