`

springJDBC 转

阅读更多
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

    &lt;bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"&gt; &lt;property name="dataSource" ref="dataSource" /&gt; &lt;/bean&gt; &lt;/beans&gt; &lt;!-- controller配置 --&gt; &lt;beans xmlns="http://www....

    springmvc+spring+springjdbc商品列表展示修改

    该项目采用springmvc+spring+springjdbc框架+mysql框架实现 包含了jdbcTemplate的使用。queryForList,匿名内部类方式查询。 将List,Object&gt;&gt;转换成List方法。

    spring-jdbc-orm:基于spring-jdbc 写的一个小型ORM

    spring-jdbc-orm基于spring-jdbc 写的一个小型ORM设计初衷由于公司现有的代码工程经历了无数人的手,原来的初衷已经变了模样,可以说乱的让我不能接受,代码中大部分都使用了Map封装实体信息,有伤大雅,大部分业务...

    spring-jdbcmapperdvw.zip

    dvw是一个用于spring-jdbc的简单Mapper。 特性 使用注解和反射实现。 通过注解声明实体属性的数据来源(查询结果的列名),并声明该属性是否使用setter赋值。 如果属性名和...

    spring+springmvc+mybatis项目案例实现用户角色权限管理

    整合Druid用于数据库连接,并使用Druid对业务层监控spring jdbc 整合EhCache,对Mybatis的二级缓存进行管理和对spring进行缓存管理 整合FastJson对指定http类型的数据进行转换 整合hibernate.validator校验器对...

    Spring框架 jar 架包 spring开发文档详解

    Spring BeanFactory Spring IOC(控制翻转)/DI(依赖注入) Spring Proxy Spring AOP 面向切面编程 Spring与JDBC整合 Spring声明式事务 Spring与Hibernate整合 Spring与Struts整合

    spring-framework 源码

    spring-framework源码,已经进行转换 eclipse可直接导入进行分析 ...spring-jdbc spring-jms spring-messaging spring-orm spring-oxm spring-test spring-tx spring-web spring-webflux spring-webmvc 等等

    List<Map>转化为List工具类

    一般使用springjdbc、hibernate的sql查询,库获取到的数据都是List, Object&gt;&gt;结果集,如果我们要转化为JavaBean,则需要做一系列的map.get(),然后obj.set()。 此工程中就是解决List, Object&gt;&gt;转化为JavaBean工具类...

    玩转spring boot 结合AngularJs和JDBC(4)

    玩转spring boot,这篇文章主要介绍了结合AngularJs和JDBC,玩转spring boot,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Sqlbean是一款通过Java语法生成SQL语句的ORM插件

    内置大量常用方法,支持灵活的条件查询,无DAO层,在项目中几乎不需要编写SQL语句,帮助你快速进行业务功能开发,除了支持Mybatis也同时支持Spring Jdbc。 多数据源, 动态Schema, 读写分离, 自动建表, 自动维护表...

    Spring Framework 5 中文文档

    15.使用JDBC实现数据访问 16. ORM和数据访问 17. 使用 O/X(Object/XML)映射器对XML进行编组 19. 视图技术 20. CORS支持 21. 与其他Web框架集成 22. WebSocket支持 24. 使用Spring提供远程和WEB服务 25. 整合EJB 26. ...

    Spring.3.x企业应用开发实战(完整版).part2

    10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 10.6.2 事务增强遗漏实例 10.7 数据连接泄漏 10.7.1 底层连接资源的访问问题 10.7.2 Spring JDBC...

    Spring 2.0 开发参考手册

    11.1.1. Spring JDBC包结构 11.2. 利用JDBC核心类实现JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 11.2.4. DataSource接口 11.2.5. ...

    Spring 5 英文文档全套.7z

    事务,DAO支持,JDBC,O / R映射,XML编组。 Web Servlet Spring MVC,WebSocket,SockJS,STOMP消息传递。 网络反应 Spring WebFlux,WebClient,WebSocket。 整合 远程处理,JMS,JCA,JMX,电子邮件,任务,...

    ProSpringProject:经过Pro Spring 4th Edition修改后的源代码-Source code modification

    ch6:Spring JDBC支持 ch7:在Spring中使用Hibernate ch8:使用JPA2在Spring中进行数据访问 ch9:事务管理 ch10:使用类型转换和格式进行验证 ch11:Spring中的任务计划 ch12:使用Spring远程处理 ch13:Spring...

    spring chm文档

    11.1.1. Spring JDBC包结构 11.2. 利用JDBC核心类实现JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 11.2.4. DataSource接口 11.2.5. ...

    Spring API

    11.1.2. Spring JDBC包结构 11.2. 利用JDBC核心类控制JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 11.2.4. DataSource接口 11.2.5....

    Spring MVC 入门实例

    16 &lt;bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"&gt; 17 18 19 --&gt; 20 21 &lt;!-- 22 23 24 25 --&gt; 26 27 它配置了以下功能(不过,已经注释掉了): ...

    开源框架 Spring Gossip

    Spring 的 DAO 支持 DataSource 注入 DataSource 置换 JDBC 支援 Spring 在 JDBC 的使用上提供了几个类别,让您可以简化 JDBC 在使用时的流程。 使用 JdbcTemplate JdbcTemplate 执行与...

    Spring攻略(第二版 中文高清版).part1

    第1章 Spring简介 1 1.1 实例化Spring IoC容器 1 1.1.1 问题 1 1.1.2 解决方案 1 1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用...

Global site tag (gtag.js) - Google Analytics