Proper Usage of remapResults="true"
The remapResults attribute is available on 【statement】, 【select】, and 【procedure】 mapped statements. It is an optional attribute and the default value is false.
The remapResults attribute should be set to true when a query has a variable set of return columns. For example, consider the following queries:
在 【statement】, 【select】, 和【procedure】 标签中存在一个可选的属性【remapResults】,默认值是false.
如果每次查询的列不定的话,这个属性需要设置为true.如下所例:
xml 代码
SELECT $fieldList$
FROM table
In this example, the list of column names is dynamic, even though the table is always the same.
在这个例子中,虽然检索的是同一张表,可是每次查询的列却是可变的。
xml 代码
SELECT *
FROM $someTable$
In this example, the table could be different. Because of the usage of * in the SELECT clause, the resulting columns names could be different, as well.
在这个例子中,因为在Select中使用了*匹配符,所以查询的列会随着表名的不同而发生变化。
Since the overhead to introspect the result set metadata is not trivial, iBATIS will remember what was returned the last time the query was run. This could create problems in situations similar to the examples above.
为了避免经常的对返回的结果进行内省,iBATIS会记录上一次查询结果的元数据,这样,在遇到上面的例子时就会出现问题。
--------------------------------------------------------------------------------
Let's consider what iBATIS will do for the first example depending on the usage of remapResults.
让我们了解一下,iBATIS是如何依赖remapResults属性的。
Without remapResults, or remapResults="false":
当没有设置remapResults属性,或者设置remapResults为false时:
Let's say $fieldList$ is set to "fld1, fld2" the first time the query is executed, thus giving the query:
假设在第一次查询时,$fieldList$设置为"fld1, fld2" ,查询语句等效下面的SQL:
xml 代码
SELECT fld1, fld2
FROM table
iBATIS will try to be efficient by assuming that fld1 and fld2 will always be in the result set on each subsequent execution of the query.
The application will run into trouble if the value for $fieldList$ changes, such as "fld3, fld4". Not only will iBATIS be unable to find fld1 and fld2 in the result set,
thus returning improper results, iBATIS won't know about fld3 and fld4 because they weren't in the query on its initial execution.
iBATIS为了效率,假设这条SQL语句今后的查询结果都会返回fld1和fld2列。
如果后面$fieldList$发生变化,比如设置为 "fld3, fld4",程序将会遇到一些麻烦。不仅仅是iBATIS找不到fld1和fld2列那么简单,
麻烦的是,iBATIS也不会识别fld3和fld4,因为在SQL初始化的时候,这两列并没有包括在内。
With remapResults="true":
iBATIS will introspect the result set metadata every time the query is run and will always return the proper results. This feature comes at some performance cost, so only use it if you really need it – when the columns in the result set are variable, either directly, like in the first example, or indirectly, because of a variable table.
当设置remapResults为"true"时:
iBATIS会在每次查询的时候内省查询结果来设置元数据,来保证返回恰当的结果。这个属性会造成一定的性能损失,所以要谨慎使用,只在你需要的时候使用--查询列发生变化,直接的,如第一个例子一样,或者隐含的,如第二个例子,检索的表发生变化。
原文: http://www.iteye.com/topic/39367
分享到:
相关推荐
描述 "ibatis运用例子,适用于初学者,很好的,很好的" 表明这个压缩包中的内容是为那些刚开始接触Ibatis的学习者准备的,可能包含了易于理解的示例代码和教程,旨在帮助他们快速掌握Ibatis的基本用法和核心概念。...
3. 动态运用:在实际项目中,Freemarker与iBatis常被结合使用,例如,iBatis负责从数据库获取数据,然后将这些数据传递给Freemarker,由Freemarker生成动态网页。这种方式可以实现MVC架构中的View层与Controller/...
iBatis是一个轻量级的Java持久层框架...通过深入阅读PDF文档,动手实践代码示例,你将能够熟练地运用iBatis来处理各种数据库操作,提升你的Java开发技能。记得在实践中不断探索和理解,iBatis的强大功能等待你去发掘。
在本资源"ibatis2.3.4.rar"中,包含了Ibatis 2.3.4版本的实例和相关的jar包,这将帮助你快速学习并熟练运用Ibatis。 Ibatis 的核心组件主要有以下几部分: 1. SQL 映射文件:这是Ibatis的核心,它定义了SQL语句、...
掌握动态SQL的使用,如if、choose、when、otherwise等标签的运用;同时,了解如何利用Ibatis提供的注解进行更简洁的编程。 此外,Ibatis还支持MyBatis Generator,这是一个自动生成Mapper接口、XML配置文件和DAO...
**标题与描述解析** 本文档集是"Ibatis官方中文文档",包含两份重要的资源:《iBATIS-SqlMaps-2_cn.pdf》和《iBATIS-Sql...对于Java开发者,尤其是从事Web应用开发的人员,深入理解和熟练运用iBATIS是非常重要的技能。
在"ibatistest2"的示例中,这些动态SQL的运用无疑增加了教程的实用性。 最后,Ibatis的事务管理也是一个重要的部分。通过Ibatis的TransactionManager,我们可以控制事务的开启、提交、回滚等行为,确保数据的一致性...
通过深入研究这两个DTD文件,开发者可以更全面地掌握Ibatis的配置语法,从而在实际项目中灵活运用,提高开发质量和效率。因此,对于希望深入学习和使用Ibatis的人来说,直接阅读和理解DTD文件是非常有价值的。
【标题】:“iBatis课件” 这组“iBatis课件”是关于Java编程领域中的一个知名持久层框架——iBatis的学习资源。...通过系统学习并实践这些知识点,你将能够熟练地在项目中运用iBatis,提高开发效率,降低维护成本。
标题 "ibatis 自动生成插件" 描述了一个用于简化IBATIS ORM框架开发的工具,它能够自动生成针对数据库表的增、删、改操作的XML配置文件和SQL...配合提供的开发指南,开发者可以更轻松地掌握和运用IBATIS进行项目开发。
通过深入阅读并实践《iBatis 3.1 官方中文帮助文档》,开发者不仅可以熟练掌握iBatis框架,还能更好地理解和运用SQL,从而提高数据访问层的设计水平。同时,这份文档也是开发者解决iBatis相关问题的重要参考资料。
本资料包包含了关于iBatis语法和常用方法的全面介绍,帮助开发者深入理解并熟练运用iBatis进行数据库操作。 首先,`iBatis 2.3.4 api.chm`是iBatis 2.3.4版本的API参考手册,包含了所有类和接口的详细说明,是学习...
本文将深入探讨Ibatis实现分页的相关知识点,并基于提供的标签“源码”和“工具”,分享如何在实际项目中运用Ibatis进行分页处理。 首先,了解Ibatis的基本概念。Ibatis是由Apache基金会维护的一个开源项目,它是一...
在"iBatis java版中文"的资源中,我们可以深入理解并学习如何在Java环境中有效地运用iBatis。 首先,让我们来看看iBatis的主要特点: 1. **SQL映射文件**:iBatis的核心在于XML或注解形式的SQL映射文件,这些文件...
本文将针对iBatis 2.3.0.677版本的源码进行深入剖析,旨在帮助开发者更好地理解和运用这一强大的数据访问工具。 首先,让我们来看看iBatis的核心功能。iBatis主要解决了Java应用中的SQL映射问题,它将SQL语句与Java...
在IT行业中,Ibatis是一个非常流行的持久层框架,它提供了SQL...通过学习和运用这些注解,你可以更轻松地实现数据层的开发,提高代码的可读性和可维护性。记得实践是检验真理的唯一标准,动手尝试是掌握新知识的关键。
【描述】"ibatis+struts2 Demo"是一个实战项目,展示了如何在实际开发中运用这两个框架来实现基本的数据库CRUD(创建、读取、更新、删除)操作。iBatis是一个轻量级的持久层框架,它将SQL语句与Java代码分离,提高了...
iBATIS-SqlMaps是Java开发中的一个持久层框架,它...通过理解和熟练运用SqlMapConfig.xml和SqlMap.xml文件,开发者可以高效地实现数据的CRUD操作,同时还能享受到iBATIS提供的高级特性,如动态SQL和复杂的数据映射。
**IBATIS DOC** IBATIS 是一个开源的Java库,它为数据库访问提供了一种灵活的方式,将SQL语句与应用程序...通过深入学习这些文档,你可以更好地掌握SQL映射、事务控制、结果映射等核心概念,并熟练运用到实际项目中。