ResultSetExtractor
RowMapper 返回list
RowCallbackHandler 自己处理返回结果,这是一个接口,实现这个接口自己处理我需要的东西,有状态的.P329
最基本的调用方法
query(PreparedStatementCreator psc, RowCallbackHandler rch)
query(String sql, PreparedStatementSetter pss, RowCallbackHandler rch) ,利用pss设置传入SQL的参数
query(String sql, Object[] args, int[] argTypes, RowCallbackHandler rch) ,利用args,argTypes设置传入的参数.Cool
update(String sql, Object[] args, int[] argTypes) Cool
update(PreparedStatementCreator psc, PreparedStatementSetter pss)
查询语句回调是因为,返回多个值
update语句没有回调,一般都是返回影响了多少个值
===========
两个类的最后的方法
Spring 2.5中JdbcTemplate类query方法的三种回调接口
使用三种Callback接口作为参数的query方法的返回值不同:
以ResultSetExtractor作为方法参数的query方法返回Object型结果,要使用查询结果,我们需要对其进行强制转型;
以RowMapper接口作为方法参数的query方法直接返回List型的结果;
以RowCallbackHandler作为方法参数的query方法,返回值为void;
RowCallbackHandler和RowMapper才是我们最常用的选择
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.RowMapperResultSetExtractor;
public class YJ {
/**
*
* 返回结果是List里装Map,使用参数,使用回调 RowMapperResultSetExtractor用于处理单行记录,
*
* 它内部持有一个RowMapper实例的引用,当处理结果集的时候, 会将单行数据的处理委派给其所持有的RowMapper实例,而其余工作它负责
*
*/
public void getListRowMapperResultSetExtractor() {
ApplicationContext context = new FileSystemXmlApplicationContext(
"src/database_config.xml");
// E:\demoworkspace\spring 为工程主目录
JdbcTemplate jt = new JdbcTemplate((DataSource) context
.getBean("oracleDataSourceTest")); // 测试用的方法
Object[] arg = new Object[] { 10 };
List list = (ArrayList) jt.query("select * from region where rownum<?",
arg, new RowMapperResultSetExtractor(new RowMapper() {
public Object mapRow(ResultSet rs, int index)
throws SQLException {
Map u = new HashMap(); // 可以是自己的JavaBean值对象(简单Java对象POJO)
u.put("region_id", rs.getString("region_id"));
u.put("region_name", rs.getString("region_name"));
return u;
}
}));
Iterator it = list.iterator();
while (it.hasNext()) {
Map map = (Map) it.next();
System.out.println(map.toString());
}
}
/**
* 返回结果是List里装Map,不使用参数,使用回调
*
* 使用RowMapper比直接使用ResultSetExtractor要方便的多,只负责处理单行结果就行,现在,我们只需要将单行的结果组装后返回就行,
*
* 剩下的工作,全部都是JdbcTemplate内部的事情了。
* 实际上,JdbcTemplae内部会使用一个ResultSetExtractor实现类来做其余的工作,
*
* 毕竟,该做的工作还得有人做不是?!
*
*/
public void getListRowMapper() {
ApplicationContext context = new FileSystemXmlApplicationContext(
"src/database_config.xml");
JdbcTemplate jt = new JdbcTemplate((DataSource) context
.getBean("oracleDataSourceTest"));
List list = jt.query(
"select * from region where rownum<10", new RowMapper() {
public Object mapRow(ResultSet rs, int index)
throws SQLException {
Map u = new HashMap();
u.put("region_id", rs.getString("region_id"));
u.put("region_name", rs.getString("region_name"));
return u;
}
});
Iterator it = list.iterator();
while (it.hasNext()) {
Map map = (Map) it.next();
System.out.println(map.toString());
}
}
// 返回记录集
/**
*
* RowCallbackHandler虽然与RowMapper同是处理单行数据,不过,除了要处理单行结果,它还得负责最终结果的组装和获取工作,
*
* 在这里我们是使用当前上下文声明的List取得最终查询结果, 不过,我们也可以单独声明一个RowCallbackHandler实现类,
*
* 在其中声明相应的集合类,这样,我们可以通过该RowCallbackHandler实现类取得最终查询结果
*
*/
public void getListRowCallbackHandler() {
ApplicationContext context = new FileSystemXmlApplicationContext(
"src/database_config.xml");
JdbcTemplate jt = new JdbcTemplate((DataSource) context
.getBean("oracleDataSourceTest"));
String sql = "select * from region where region_id>?";
final List<Map> list = new ArrayList<Map>(); // 一定要用final定义
Object[] params = new Object[] { 0 };
jt.query(sql, params, new RowCallbackHandler() {
public void processRow(ResultSet rs) throws SQLException {
Map u = new HashMap();
u.put("region_id", rs.getString("region_id"));
u.put("region_name", rs.getString("region_name"));
list.add(u);
}
});
Iterator it = list.iterator();
while (it.hasNext()) {
Map map = (Map) it.next();
System.out.println(map.toString());
}
}
}
===========================
public List<ProjectModel> getProjectListByPMID (String pm_id) throws DataAccessException, DocumentException, IOException{
List<ProjectModel> lProjects = new ArrayList<ProjectModel>();
this.getJdbcTemplate().query(SQLManager.getSQL("getProjectListByPMID"),new Object[]{pm_id},new int[]{Types.VARCHAR}, new GetProjectListByPMIDRowCallbackHandler(lProjects));
return lProjects;
}
private class GetProjectListByPMIDRowCallbackHandler implements RowCallbackHandler {
List<ProjectModel> lProjects = new ArrayList<ProjectModel>();
private GetProjectListByPMIDRowCallbackHandler(List<ProjectModel> l){
this.lProjects = l;
}
public void processRow(ResultSet rs) throws SQLException{
ProjectModel project = new ProjectModel();
project.setProjectID(String
.valueOf(rs.getInt("id")));
project.setProjectName(Utils.convertNull(rs
.getString("project_name")));
project.setProjectWON(Utils.convertNull(rs
.getString("project_won")));
lProjects.add(project);
}
}
================
public int addSkill(String skillName) throws DataAccessException, DocumentException, IOException{
return this.getJdbcTemplate().update(SQLManager.getSQL("addSkill"),new Object[]{skillName},new int[]{Types.VARCHAR});
}
======================
CallableStatementCallback callBack = new CallableStatementCallback(){
public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException{
cs.setString(1, empID);
cs.registerOutParameter2, java.sql.Types.NUMERIC);// out_success
cs.execute();
return (CallableStatement) cs;
}
};
cs = (CallableStatement)this.getJdbcTemplate().execute(sql, callBack);
int totalRecords = cs.getInt(7);
分享到:
相关推荐
通过这个SpringJDBC.rar的案例,初学者可以学习到如何配置DataSource,如何创建JdbcTemplate实例,以及如何编写和执行SQL语句。同时,实践中还可以了解到如何将Spring JDBC整合到Spring Boot项目中,以及如何处理...
这个`springjdbc.zip`压缩包很可能包含了示例代码和配置文件,用于演示如何使用Spring JDBC来执行基本的数据库操作,如增、删、改、查。 1. **Spring JDBC模块**:Spring JDBC模块主要由`org.springframework.jdbc`...
Spring JDBC是Spring框架中的一个核心模块,主要用于简化Java数据库编程。在本文中,我们将深入探讨Spring JDBC的应用实例,了解如何利用它来实现高效且灵活的数据访问。首先,我们需要理解Spring JDBC是如何通过...
Spring JDBC是Spring框架的一个核心模块,它为Java数据库连接(JDBC)提供了一个高级抽象层,简化了数据库操作。在本实例中,我们将深入探讨Spring JDBC的使用,并以`SpringJdbcTemplate`为例来阐述其主要功能和优势...
SpringMVC和SpringJDBC是Java开发中两个重要的框架,它们分别是Spring框架在Web层和数据访问层的应用。本文将详细介绍这两个组件的核心概念、工作原理以及如何整合使用,旨在帮助开发者更好地理解和应用。 **...
在Java开发中,Spring框架是不可或缺的一部分,尤其在处理数据访问层时,Spring JDBC提供了一种强大而灵活的方式来管理数据库连接。Spring JDBC模块是Spring框架的一部分,它简化了JDBC的使用,使得开发者可以更加...
Spring JDBC是Spring框架的一个核心模块,它为Java开发者提供了便捷的方式来操作数据库。Spring JDBC通过抽象出数据库连接管理、事务处理以及结果集处理等繁琐工作,使得开发者可以专注于SQL语句和业务逻辑,而不必...
Spring JDBC是Spring框架的一部分,它提供了一种抽象层,使得我们能够更方便地使用Java数据库连接(JDBC)来处理数据库操作,如增删改查(CRUD)。在这个主题下,我们将深入探讨Spring JDBC的核心概念、配置、以及...
这个“SpringJDBC.rar”压缩包文件可能包含了关于如何在Spring框架中集成和使用JDBC的相关示例和教程。下面将详细解释Spring JDBC的核心概念、功能以及使用方法。 首先,Spring JDBC的核心目标是简化传统的JDBC编程...
### Spring JDBC 概述 Spring框架提供了一种强大的机制来简化Java应用程序中的数据库访问操作,这一机制即为Spring JDBC模块。通过Spring JDBC,开发者能够更加高效地管理与数据库的交互,减少传统JDBC编程中常见的...
在Java的Spring框架中,Spring JDBC(Java Database Connectivity)是一个重要的模块,用于简化数据库操作。Spring JDBC通过提供JdbcTemplate和SimpleJdbcTemplate等工具类,帮助开发者以更安全、更易于管理的方式与...
本文将深入探讨Spring对JDBC(Java Database Connectivity)的支持,以及如何在实际项目中使用这些功能。 首先,Spring JDBC的核心是`org.springframework.jdbc`包,它提供了一套高级抽象,用于简化数据库操作。在...
Spring JDBC是Spring框架的一个核心模块,它为Java数据库连接(JDBC)提供了一种抽象层,使得开发者可以更轻松地处理数据库操作。Spring JDBC模块的主要目标是减少对JDBC API的直接依赖,通过提供一种更加高级、易于...
**SpringMVC、Spring与SpringJDBC整合详解** 在Java Web开发中,Spring框架因其强大的功能和灵活性而被广泛使用。SpringMVC、Spring和SpringJDBC是Spring框架的三个重要组成部分,它们协同工作,提供了从用户接口到...
Spring JDBC是Spring框架的一个核心模块,它为Java开发者提供了对JDBC(Java Database Connectivity)的高级封装,使得数据库操作变得更加简单、易管理。在Spring框架中,Spring JDBC通过一系列的抽象层,如...
《Spring JDBC:构建高效数据访问层》 Spring JDBC是Spring框架的一个重要组成部分,它提供了一种简化传统JDBC编程的抽象层,使得开发者能够更轻松、更安全地处理数据库交互。"spring-jdbc jar包"包含了Spring框架...
本示例"Spring mvc、Spring、Spring jdbc 整合 demo"着重展示了Spring框架的三大关键模块:Spring MVC(模型-视图-控制器)、Spring Core以及Spring JDBC的集成与应用。 1. **Spring MVC** Spring MVC是Spring框架...
《Spring JDBC源码深度解析与应用实践》 在Java领域,Spring框架以其强大的功能和灵活的设计,成为企业级开发的首选。Spring JDBC模块是Spring框架的重要组成部分,它为开发者提供了简洁、高效的数据库操作方式,...
Spring JDBC是Spring框架的一部分,它提供了一种抽象层,简化了Java数据库编程。这个入门Demo将引导我们了解如何使用Spring JDBC来与数据库进行交互。在本文中,我们将深入探讨Spring JDBC的核心概念、基本操作以及...
在这个"springJdbcDemo11_java_springjdbc_"项目中,我们将深入探讨Spring集成JDBC的基本概念、配置和核心组件,以及如何通过实例快速上手并理解其工作原理。 1. **Spring JDBC简介** Spring JDBC模块是为了简化...