`
sinokaka
  • 浏览: 327483 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

合理运用remapResults属性

阅读更多
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 代码
  1. SELECT $fieldList$   
  2.   FROM table  
In this example, the list of column names is dynamic, even though the table is always the same.
在这个例子中,虽然检索的是同一张表,可是每次查询的列却是可变的。
xml 代码
  1. SELECT *   
  2.   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 代码
  1. SELECT fld1, fld2   
  2.   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会在每次查询的时候内省查询结果来设置元数据,来保证返回恰当的结果。这个属性会造成一定的性能损失,所以要谨慎使用,只在你需要的时候使用--查询列发生变化,直接的,如第一个例子一样,或者隐含的,如第二个例子,检索的表发生变化。

分享到:
评论
2 楼 7先生 2013-12-18  
刚好遇到这个问题,看到这篇文章解决了
1 楼 qkjava 2012-09-19  
这个问题刚刚碰到

相关推荐

    解决IBatis缓存动态字段问题

    1. **检查 SQL 语句**:首先确认所有涉及到动态表名和动态字段名的 `<select>` 标签中是否都已经正确地设置了 `remapResults="true"` 属性。 2. **代码审查**:对于所有涉及到动态表名和字段名的操作,需要仔细检查...

    系统常见问题说明

    为了避免这种情况,可以通过调整IBATIS的配置,具体而言,设置`remapResults`属性为`true`,以此来屏蔽缓存功能,确保查询操作的顺利进行。这一策略能够有效规避由缓存引发的SQL错误,保障系统的稳定运行。 #### ...

    ibatis 用HashMap解决resultClass映射

    为了使查询结果能够适应变化的列名和列数,我们需要设置 `remapResults` 属性为 `true`。 ```xml <!-- sqlMap 映射文件 --> <select id="getDynamicTable" resultClass="java.util.HashMap" remapResults="true" ...

    java项目应用中自定义sql在ibaits框架中的使用.docx

    通过查阅文档,找到了配置选项来控制是否使用缓存,例如`<resultMap>`标签的`cache`属性可以关闭特定映射的缓存,或者使用`<select>`标签的`flushCache="true"`属性,强制每次执行后清空缓存。 总结来说,自定义SQL...

    风力发电机控制系统仿真设计 风力发电系统动态模拟仿真 光伏发电系统 本设计主要依据风力发电机组的控制目标和控制策略,通过使用电力系统动态模拟仿真软件PSCAD EMTDC,建立变桨距风力发电机组控制系

    风力发电机控制系统仿真设计 风力发电系统动态模拟仿真 光伏发电系统 本设计主要依据风力发电机组的控制目标和控制策略,通过使用电力系统动态模拟仿真软件PSCAD EMTDC,建立变桨距风力发电机组控制系统的模型。 为了验证控制系统模型的可用性,建立风力发电样例系统模型,对样例系统进行模拟仿真,并对所得的仿真结果进行了分析,从而证实了风力发电机组控制系统模型的可用性,然后得出了它的控制方法。

    安卓项目源码Androidafinal开源框架实例源码

    安卓项目源码Android afinal开源框架实例源码提取方式是百度网盘分享地址

    C4网络技术挑战赛B-EP1赛道解决方案与实践.zip

    C4网络技术挑战赛B-EP1赛道解决方案与实践.zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 6、欢迎下载,沟通交流,互相学习,共同进步!

    医效选录.pdf

    医效选录.pdf

    Bandgap 带隙基准,带启动电路,带版图 适合新手练习 主要包含以下仿真内容: 温度特性曲线 电源抑制比psrr仿真 稳定性仿真,整个环路的稳定性 噪声仿真,可以知道噪声的主要贡献来源 输出电压精

    Bandgap 带隙基准,带启动电路,带版图 适合新手练习 主要包含以下仿真内容: 温度特性曲线 电源抑制比psrr仿真 稳定性仿真,整个环路的稳定性 噪声仿真,可以知道噪声的主要贡献来源 输出电压精度仿真 [cool][cool]testbench有单独的仿真状态,直接安装可以运行 性价比高,可以买回去练一练

    工程机器人大赛(含全部参赛源码及资料).zip

    工程机器人大赛(含全部参赛源码及资料).zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 6、欢迎下载,沟通交流,互相学习,共同进步!

    汽车中间件市场调研报告:2023年全球汽车中间件市场销售额达到了78亿美元

    汽车中间件市场调研报告:2023年全球汽车中间件市场销售额达到了78亿美元 在数字化转型的浪潮中,汽车中间件作为连接硬件与软件的关键桥梁,正引领着汽车行业的新一轮变革。随着全球汽车产业的快速发展,中间件市场规模持续扩大,展现出前所未有的增长潜力。然而,面对复杂多变的市场环境和不断涌现的新技术,企业如何精准把握市场脉搏,实现可持续发展?本文将深入探讨全球及中国汽车中间件市场的现状、趋势及竞争格局,为您揭示咨询的重要性。 市场概况: 根据QYResearch(恒州博智)的统计及预测,2023年全球汽车中间件市场销售额达到了78亿美元(约7803百万美元),预计2030年将达到156亿美元(约15630百万美元),年复合增长率(CAGR)为10.3%(2024-2030)。这一数据不仅彰显了中间件市场的强劲增长动力,也预示着未来巨大的市场空间。 技术创新与趋势: 随着自动驾驶、车联网等技术的不断发展,汽车中间件正面临着前所未有的技术挑战与机遇。新一代中间件需要具备更高的实时性、更低的延迟以及更强的数据处理能力,以满足复杂多变的汽车应用场景。同时,云计算、大数据、人工智能等技术的融合应用,将进

    基于梯度方向的VVC帧内编码中CU划分早终止算法研究与实现

    内容概要:本文探讨了一种在VVC(Versatile Video Coding)帧内编码中基于梯度方向特性的早期终止算法,旨在减少不必要的搜索从而优化计算复杂度。文中分析了视频编码的统计特征以及不同方向梯度的影响来指导CU(Coding Unit)分割决策流程。此外还介绍了算法的具体操作步骤和逻辑分支条件。实验结果显示该方法能够显著节省编码时间,平均达到约38%-51%,尽管BD-rate有所牺牲但总体上提升了效率并保持了较好的编码性能。 适合人群:从事多媒体通信系统开发或者图像视频压缩技术领域的研究人员和工程师,特别是那些对高分辨率影像处理感兴趣的专业人士。 使用场景及目标:本研究适用于寻求提高VVC标准下编码速度而不大幅度降低质量的应用环境中,如高清或超高清实时流媒体传输和服务提供者希望加快转码过程的情况。 其他说明:作者感谢中国国家重点研发计划和其他项目对于此项工作的支持,并提供了丰富的参考文献列表用于进一步的研究。

    占空比可调方波.ms14

    占空比可调方波.ms14

    基于matlab的单指针百分数表盘识别系统 表盘识别基于计算机视觉设计,基于霍夫变算法,含GUI界面 步骤:灰度化,二值化,反色,细化,霍夫变,提取峰值,检测识别 功能:识别单指针仪表盘,显示仪表

    基于matlab的单指针百分数表盘识别系统 【表盘识别】基于计算机视觉设计,基于霍夫变算法,含GUI界面 步骤:灰度化,二值化,反色,细化,霍夫变,提取峰值,检测识别 功能:识别单指针仪表盘,显示仪表指针角度以及仪表示数,显示二值化图像,灰度化图像,变域图像。 代码结构清晰,含有注释,运算速度快,可扩展。

    简单的HTML和JavaScript代码,跨年倒计时html代码

    跨年倒计时html代码

    级联H桥储能变器,级联H桥整流器 采用栽波移相调制,功率外环电流内环控制; 相内SOC为基波均衡分量注入,相间SOC为零序电压注入法,可在短时间内使得SOC达到平衡, 下图为2单元五电平,可做多模块级

    级联H桥储能变器,级联H桥整流器 采用栽波移相调制,功率外环电流内环控制; 相内SOC为基波均衡分量注入,相间SOC为零序电压注入法,可在短时间内使得SOC达到平衡, 下图为2单元五电平,可做多模块级联,H桥整流等 提供参考文献,,Matlab为2018b

    adaceshiwaifa,adaceshiwaifa,adaceshiwaifa,adaceshiwaifa

    adaceshiwaifa,adaceshiwaifa,adaceshiwaifa,adaceshiwaifa

    光伏交直流混合微电网双下垂控制离网(孤岛)模式Matlab仿真模型 ①交直流混合微电网结构: 1.直流微电网,由光伏板+Boost变器组成,最大输出功率10 kW 2.交流微电网,由光伏板+Boos

    光伏交直流混合微电网双下垂控制离网(孤岛)模式Matlab仿真模型 ①交直流混合微电网结构: 1.直流微电网,由光伏板+Boost变器组成,最大输出功率10 kW。 2.交流微电网,由光伏板+Boost变器+LCL逆变器组成,最大输出功率15 kW。 3.互联变器(ILC),由LCL逆变器组成,用于连接交直流微电网。 ②模型内容: 1.直流微电网:采用下垂控制,控制方式为电压电流双闭环,直流母线额定电压700 V。 2.交流微电网中,Boost变器采用恒压控制,直流电容电压为700 V,LCL逆变器采用下垂控制,额定频率50 Hz,额定相电压有效值220 V。 3.ILC采用双下垂控制策略,首先将交流母线频率和直流母线电压进行归一化,使其范围控制在[-1,1],之后通过ILC的归一化下垂控制调节交流母线频率和直流母线电压的偏差,最终使二者数值相同。 4.其余部分包括采样保持、坐标变、功率滤波、SVPWM等环节。 ③仿真工况:0.75 s时刻负载由12 kW增至16 kW,可以看出系统仍能稳定运行,波形质量良好,且交流母线频率和直流母线电压归一化的参数在ILC控制下趋于一致。

    基于SpringBoot+Vue.JS开发的校园闲置物品交易系统 JAVA毕业设计 源码+数据库+论文(有项目截图)+启动教程

    基于SpringBoot+Vue.JS开发的校园闲置物品交易系统 JAVA毕业设计 源码+数据库+论文(有项目截图)+启动教程

    Android Studio实现学生信息管理系统源码(高分项目).zip

    Android Studio实现学生信息管理系统源码(高分项目).zip个人经导师指导并认可通过的高分大作业项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 Android Studio实现学生信息管理系统源码(高分项目).zipAndroid Studio实现学生信息管理系统源码(高分项目).zipAndroid Studio实现学生信息管理系统源码(高分项目).zipAndroid Studio实现学生信息管理系统源码(高分项目).zipAndroid Studio实现学生信息管理系统源码(高分项目).zipAndroid Studio实现学生信息管理系统源码(高分项目).zipAndroid Studio实现学生信息管理系统源码(高分项目).zipAndroid Studio实现学生信息管理系统源码(高分项目).zipAndroid Studio实现学生信息管理

Global site tag (gtag.js) - Google Analytics