ibatis返回结果映射到HashMap时,列名无效的问题
开发过程中遇到问题:
1.项目开发过程中在xml配置文件中使用$tableName$时,报"列名无效"错误,后来经过查询,发现是ibatis缓存
了上一次查询的表结构的原因。解决办法:只需要在元素中添加 remapResults="true" 即可。
<select id="select" resultClass="java.util.HashMap" >
select * from $tableName$ where id=#id#
</select>
该查询结果映射到HashMap中,第一次使用这个语句是没有问题,但是当使用这个语句查询别的表时,报错为“列名无效”,
分析之后原因为ibatis对上个表的结构进行了映射缓存,从结果集到HashMap的映射时按照缓存中表字段进行装载。
使用remapResults这个属性,可以重新映射结果集
<select id="select" resultClass="java.util.HashMap" remapResults="true" >
select * from $tableName$ where id=#id#
</select>
2:在ibatis的配置文件中,经常会使用parameterClass="java.util.Map",这种用法是可以的,因为map是接口
是多态的典型用法,但是如果这样写resultClass="java.util.Map"就会报错,不能实例化对象,就是ibatis不能把
查询到的数据映射到map接口上,解决方法:修改成resultClass="java.util.HashMap"即可。
3:项目中遇到ibatis中parameterClass = "java.util.List" 时,那么sql语句拼接如下:
<select id="selectSqlId" parameterClass="java.util.List" resultClass="java.util.HashMap">
SELECT *
FROM table_name
WHERE name IN
<iterate close=")" open="(" conjunction=",">
#[]#
</iterate>
</select>
4:isNull、isNotNull、isEmpty、isNotEmpty、isEquals
则几种判断元素在ibatis中用的很多,isNotNull和isNotEmpty用的比较多,
比如在select的where条件里,如果字段存在就拼接,不存在就不拼接
<select id="selectSqlId" parameterClass="java.util.Map">
select * from tableName
where 1=1
<isNotNull prepend="AND" property="id">
id = #id#
</isNotNull>
<isNotNull prepend="AND" property="name">
name = #name#
</isNotNull>
</select>
就是如果id存在,就拼接上id这个查询条件,不存在就没有这个条件限制,name也是这样。
isNotEmpty的用法和isNotNull一样,只是稍微有一点区别,就是isNotEmpty包括空字符串和null
而isNotNull只包括null。
isNULL和isEmpty的用法相反。
isEquals:判断是否等于,等于的话就走这条分支,如下:
<update id="updateSqlId" parameterClass="java.lang.String">
update table_name set update_date = sysdate
<isEquals prepend="," property="id1">
id1=#value#
</isEquals>
<isEquals prepend="," property="id2">
id2=#value#
</isEquals>
</update>
可以根据具体情况灵活应用。
ibatis返回结果映射到HashMap时,列名无效的问题的更多相关文章
- 【iBatis】使用resultMap配置返回结果时报错“列名无效”
使用iBatis联查DEPT.EMP两张表时 采用如下结构 <resultMap id="find_departmentMap" class="com.dto.De ...
- LeetCode 706:设计哈希映射 Design HashMap
题目: 不使用任何内建的哈希表库设计一个哈希映射 具体地说,你的设计应该包含以下的功能 put(key, value):向哈希映射中插入(键,值)的数值对.如果键对应的值已经存在,更新这个值. get ...
- iBatis查询时报"列名无效"或"找不到栏位名称"无列名的错误原因及解决方法
iBatis会自动缓存每条查询语句的列名映射,对于动态查询字段或分页查询等queryForPage, queryForList,就可能产生"列名无效".rs.getObject(o ...
- ibatis返回map列表
ibatis返回map列表 1. resultClass="java.util.HashMap" <select id="queryCustmerCarNoBy ...
- [Swift]LeetCode706. 设计哈希映射 | Design HashMap
Design a HashMap without using any built-in hash table libraries. To be specific, your design should ...
- 当我们创建HashMap时,底层到底做了什么?
jdk1.7中的底层实现过程(底层基于数组+链表) 在我们new HashMap()时,底层创建了默认长度为16的一维数组Entry[ ] table.当我们调用map.put(key1,value1 ...
- IBatis.Net使用总结(二)-- IBatis返回DataTable/DataSet(网上例子的集合)
IBatis返回DataTable,DataSet ibatis.net QueryForDataTable 完整的为ibatis.net 引入datatable支持要改动很多地方,所以描述的是最小化 ...
- Android:后台给button绑定onClick事件、当返回项目到手机页面时提示是否退出APP
上一篇文章我们学习了android通过findViewById的方式查找控件,本章将了解button控件,及btton如何绑定控件. 通过android的ui设计工具设计一个登录页面: <Rel ...
- Win7共享问题 映射网盘时出现的错误 the specified server cannot perform the requested operation
Win7共享问题 映射网盘时出现的错误:the specified server cannot perform the requested operation 解决方案: 1.重启电脑: 2.修改注册 ...
随机推荐
- 第二百六十一、二天 how can I坚持
昨天在家宅了一天,晚上去看了个电影<寻龙诀>,感觉一般,虽然有黄渤.舒淇.十分打7分吧,画面倒是很震撼. 今天,去了趟东升八家郊野公园,想买个篮球玩玩来,可是超市里的太坑了,都是赠品还拿出 ...
- HDU 5724 Chess (sg函数)
Chess 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5724 Description Alice and Bob are playing a s ...
- AutoCAD.NET二次开发:创建自定义菜单的两种方法比较
目前我已经掌握的创建CAD菜单方法有两种: COM方式: http://www.cnblogs.com/bomb12138/p/3607929.html CUI方式: http://www.cnblo ...
- ASP.NET MVC 前端(View)向后端(Controller)中传值
在MVC中,要把前端View中的值传递给后端Controller, 主要有两种方法 1. 利用Request.Form 或者 Request.QueryString public ActionResu ...
- iOS应用内HTTP服务上传文件
相信很多朋友都用过AirAV.100tv这类iOS视频播放应用中通过Wifi,从PC上输入Web地址上传文件到iOS设备上,我也一直想实现这个功能,苦于知识掌握有限,后来在其他群友的指导下参照很多大神 ...
- Caused by: Cannot locate the chosen ObjectFactory implementation: spring - [unknown location] 的解决方式
1.添加网上所说的struts2 plugin jar包 2. <!-- Struts2配置 --> <filter> <filter-name>struts2&l ...
- springMVC部署
一.导入springMVC所需要的jar包 下载地址:http://repo.spring.io/release/org/springframework/spring/ 二.springM ...
- linux中crontab实现以秒执行任务
用crontab+sleep实现以秒执行任务 crontab -e * * * * * /bin/date >>/tmp/date.txt * * * * * sleep 10s; /bi ...
- HDU 4586 A - Play the Dice 找规律
A - Play the DiceTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/ ...
- C++的XML编程经验――LIBXML2库使用指南[转]
C++的XML编程经验――LIBXML2库使用指南 写这篇文章的原因有如下几点:1)C++标准库中没有操作XML的方法,用C++操作XML文件必须熟悉一种函数库,LIBXML2是其中一种很优秀的XML ...