JdbcTemplate查询数据中两种处理结果集方法的简单比较

	public List<Cat> listCats(){
		//多条数据查询
		String sql = "select id, name, description, mother_id, createDate from tbl_cat";

		/*//方法1、使用RowMapper<Cat>处理结果集
		return jdbcTemplate.query(sql, new RowMapper<Cat>(){

			@Override
			public Cat mapRow(ResultSet rs, int index) throws SQLException {
				// TODO Auto-generated method stub
				Cat cat = new Cat();
				cat.setId(rs.getInt("id"));
				cat.setMother_id(rs.getInt("mother_id"));
				cat.setDescription(rs.getString("description"));
				cat.setCreateDate(rs.getDate("creatDate"));
				return cat;
			}

		});*/
		//方法2、使用RowCallbackHandler()
		final List<Cat> catList = new ArrayList<Cat>();//在内部匿名类中使用
		jdbcTemplate.query(sql, new RowCallbackHandler() {

			@Override
			public void processRow(ResultSet rs) throws SQLException {
				// TODO Auto-generated method stub
				Cat cat = new Cat();
				cat.setId(rs.getInt("id"));
				cat.setMother_id(rs.getInt("mother_id"));
				cat.setDescription(rs.getString("description"));
				cat.setCreateDate(rs.getDate("creatDate"));
				//####do something
				catList.add(cat);
			}
		});
		return catList;

	}

  两种方法在功能上并没有太大的区别,都是用于定义结果集行的读取逻辑,将ResultSet中的数据映射到对象或者list中。

区别是,使用RowMapper,将直接得到一个List,而RowCallbackHandler并不直接返回数据,而是在processRow()接口方法中自己对得到的数据进行处理。

当处理大结果集时,如果使用RowMapper,结果集中所有数据最终都会映射到List中,占用大量的JVM内存,甚至直接引发OutOfMemroyException异常。这时应该使用RowCallbackHandler接口在processRow()接口方法中处理得到的数据(在//####do something 处),而不是将其添加到List中。

时间: 2024-10-31 18:29:23

JdbcTemplate查询数据中两种处理结果集方法的简单比较的相关文章

ajax请求中 两种csrftoken的发送方法

通过ajax的方式发送两个数据进行加法运算 html页面 <body> <h3>index页面 </h3> <input type="text" name="cal_1">+ <input type="text" name="cal_2">= <input type="text" name="cal_3"> <

objective-C 中两种实现动画的方法

第一种方法: [UIView beginAnimations:@"Curl"context:nil];//动画开始 [UIView setAnimationDuration:1.25];//动画持续时间 [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];//动画速度 [UIView setAnimationTransition: UIViewAnimationTransitionCurlUp//类型 forView:sel

js中两种实现排序的方法

<!DOCTYPE html><html><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="viewport" content="width=device-width; initial-scale=1

MySQL中删除数据的两种方法

转自:http://blog.csdn.net/apache6/article/details/2778878 在MySQL中有两种方法可以删除数据,一种是DELETE语句,另一种是TRUNCATE TABLE语句. DELETE语句可以通过WHERE对要删除的记录进行选择.而使用TRUNCATE TABLE将删除表中的所有记录.因此,DELETE语句更灵活. 如果要清空表中的所有记录,可以使用下面的两种方法: DELETE FROM table1 TRUNCATE TABLE table1 其

SpringMVC中controller返回json数据的两种方法

SpringMVC中controller返回json数据的两种方法 1.jsp的ajax请求: function getJson(){ $.ajax({ type:"get", dataType:"json", url:"<%=basePath %>getJson", success:function(data){ for(var i=0;i<jsonData.length;i++){ alert("Id:"

C语言中数据的两种属性及static的作用

C语言中数据有两种属性:数据类型和存储类别.数据类型定义了数据格式(长度),存储类别定义了数据的作用域和生命期. 1.变量的声明 1.1 变量的声明的一般形式:存储类别 数据类型 变量名;数据类型以int为例: 自动变量:auto int i;//自动变量是局部变量 局部变量:在函数内部定义的变量,局部变量缺省存储类别时就是自动变量 作用域:从定义开始到函数结束. 生命期:从函数调用开始到函数推出为止. 外部变量/全局变量:在函数外部定义而没有指出存储类别的变量 定义外部变量:extern in

HBase存储时间相关多列数据的两种方案

所谓“时间相关多列数据”指的是同一个Key下具有多个属性数据,并且这些数据与时间具有相关性,多数场景是该Key对应在不同时间时刻的行为数据.在实际应用中,这类数据很多,例如电子商务网站上用户最近一段时间浏览的宝贝集合.访问的URL列表等. 使用HBase存储此类数据时,有以下两种常用的方案: 多行单列 表结构设计 Row Key:用户标识ID + (Long.MAX_VALUE - timestamp) Column Family:’cf’ Column Qualifier:’’ Value:宝

SQL Server 批量插入数据的两种方法

在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Insert不仅效率低,而且会导致SQL一系统性能问题.下面介绍SQL Server支持的两种批量数据插入方法:Bulk和表值参数(Table-Valued Parameters). 运行下面的脚本,建立测试数据库和表值参数. [c-sharp] view plaincopy --Create DataBase create database BulkTestDB; go use BulkTes

待处理数据的两种模型

在业务处理时,经常会存在待处理的业务数据,在处理这部分数据时,有如下的处理方式. Worker模型:包含Worker处理类(Processor),调度处理框架,时间规则配置. Worker处理类,待处理业务数据的处理类. 调度处理框架,根据时间配置的规则, 在指定的时间点内,调用worker处理类. 时间规则配置,设置worker处理类的启动时间以及频率. 优点:1.实现简单,现在有Spring和Quartz框架,直接配置好时间表达式之后以及处理器之后,就可以直接执行了. 2.各种Worker之