ibatis返回结果映射到HashMap时,列名无效的问题
遇到问题:
1.项目开发过程中在xml配置文件中使用$tableName/sql$时,报"列名无效"错误,后来经过查询,发现是ibatis缓存
了上一次查询的表结构的原因。解决办法:只需要在元素中添加 remapResults="true" 即可。
1 <select id="select" resultClass="java.util.HashMap" > 2 select * from $tableName$ where id=#id# 3 </select>
该查询结果映射到HashMap中,第一次使用这个语句是没有问题,但是当使用这个语句查询别的表时,报错为“列名无效”,
分析之后原因为ibatis对上个表的结构进行了映射缓存,从结果集到HashMap的映射时按照缓存中表字段进行装载。
使用remapResults这个属性,可以重新映射结果集
1 <select id="select" resultClass="java.util.HashMap" remapResults="true" > 2 select * from $tableName$ where id=#id# 3 </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语句拼接如下:
1 <select id="selectSqlId" parameterClass="java.util.List" resultClass="java.util.HashMap"> 2 SELECT * 3 FROM table_name 4 WHERE name IN 5 <iterate close=")" open="(" conjunction=","> 6 #[]# 7 </iterate> 8 </select>
4:isNull、isNotNull、isEmpty、isNotEmpty、isEquals
则几种判断元素在ibatis中用的很多,isNotNull和isNotEmpty用的比较多,
比如在select的where条件里,如果字段存在就拼接,不存在就不拼接
1 <select id="selectSqlId" parameterClass="java.util.Map"> 2 select * from tableName 3 where 1=1 4 <isNotNull prepend="AND" property="id"> 5 id = #id# 6 </isNotNull> 7 <isNotNull prepend="AND" property="name"> 8 name = #name# 9 </isNotNull> 10 </select>
就是如果id存在,就拼接上id这个查询条件,不存在就没有这个条件限制,name也是这样。
isNotEmpty的用法和isNotNull一样,只是稍微有一点区别,就是isNotEmpty包括空字符串和null
而isNotNull只包括null。
isNULL和isEmpty的用法相反。
isEquals:判断是否等于,等于的话就走这条分支,如下:
1 <update id="updateSqlId" parameterClass="java.lang.String"> 2 update table_name set update_date = sysdate 3 <isEquals prepend="," property="id1"> 4 id1=#value# 5 </isEquals> 6 <isEquals prepend="," property="id2"> 7 id2=#value# 8 </isEquals> 9 </update>
可以根据具体情况灵活应用。
转载于:https://www.cnblogs.com/warrior4236/p/6055748.html
ibatis返回结果映射到HashMap时,列名无效的问题相关推荐
- iBatis数据库字段映射到Java对象。
数据库执行完SQL后会返回执行结果,iBatis如何将查询出来的记录设置到account对象中呢? 和ParameterMap类似,填充返回信息需要的资源都已经包含在ResultMap中.当有了保存返 ...
- [ibatis]列名无效问题处理
问题场景: 使用了ibatis的查询功能,点击查询后一直报列名无效的问题,但是将日志中打印出来的sql在pl/sql里面执行没有报错.检查了ibatis的sql管理文件,列名没有写错的情况,参数传递也 ...
- IbatiS关联字段映射
IbatiS的一个小功能. 在编写resultMap的时候,如果自己定义了一个数据库中并不对应的字段,比如是关联其他表的字段.则可以这样实现: <result property="ty ...
- ibatis 列名无效
项目中使用到ibatis动态SQL,如下 <select id="findResources" parameterClass="String" resul ...
- Spring JdbcTemplate的queryForList(String sql , Class<T> elementType)返回非映射实体类的解决方法
Spring JdbcTemplate的queryForList(String sql , Class elementType)返回非映射实体类的解决方法 参考文章: (1)Spring JdbcTe ...
- 【软件开发底层知识修炼】二十五 ABI之函数调用约定二之函数返回值为结构体时的约定
上一篇文章学习了几种函数调用约定的区别,点击链接查看上一篇文章:[软件开发底层知识修炼]二十四 ABI之函数调用约定 本篇文章继续学习函数调用约定中,关于函数返回值的问题.当函数返回值为结构体时,函数 ...
- (配置消息转换器)解决后台返回json数据到前台时页面时中文显示乱码问题
(配置消息转换器)解决后台返回json数据到前台时页面时中文显示乱码问题 SpringMVC.xml中加 <!-- 配置消息转换器(解决中文乱码问题)--><mvc:annotati ...
- win10服务器返回为空,CAD出现错误: ActiveX 服务器返回错误: 加载类型库/DLL 时出错...
装精简版的autocad2012,运行有些vlisp命令时,出现"错误: ActiveX 服务器返回错误: 加载类型库/DLL 时出错"的提示,无法进行下去,以为是新版本CAD不支 ...
- JAVA列名无效解决方案,Java-请各位大神指教,我在用MyBatis Generator进行逆向工程时,报“列名无效”错误。...
错误代码如下,请各位大神指点指点,小弟不胜感激: Exception in thread "main" java.sql.SQLException: 列名无效 at oracle. ...
最新文章
- Javascript+PHP实现在线拍照功能 (转)
- 如何为linux 桌面文件内存,linux - 桌面Linux发行版中.desktop文件的功能是什么? - 堆栈内存溢出...
- (纯干货)万字长文,数据分析利器 pandas 全教程
- 验证网站地址是否有效
- Docker容器内部署Java微服务的内存限制问题
- 怎么判断前轮左右的位置_汽车上主要传感器的安装位置,你知道多少?
- JAVASCRIPT发展历程
- delete表1条件是另一个表中的数据,多表连接删除
- Python风格总结:日期操作
- NTFS不利的一面——ADS流文件
- 1111---9999的变换
- 基线管理之Windows安全配置
- mysql如何创建用户代码_Mysql 创建用户 受权_mysql
- 优化函数 (Optimization Function)
- str中的join方法,fromkeys(),set集合,深浅拷贝(重点)
- 第四届高教杯计算机绘图教程,第三届“高教杯”机械类计算机绘图试卷(三维).pdf...
- 实验三:Windows7操作系统安全
- 缺点 霍夫圆_霍夫圆变换
- 甲骨文要回收闲置实例,如何应对
- 计算机网络(自顶向下方法)-Internet概述
热门文章
- 大家可以在十分钟内入睡吗?有什么快速入睡的方法吗?
- 如何应对倒戈的员工?
- 如何给一家公司做定性研究?
- Currently, the Linux Mint team has 21 members
- org.apache.maven.plugins:maven-resources-plugin:2.4.3
- IDEA的创建javaWeb工程以及修改默认的class文件输出
- windows部署tomcat服务自动启动,同时解决服务无法启动的问题
- 从git上clone项目到IDEA
- css实现图片虚化_什么? CSS 阴影竟然还有这种骚操作 ?
- 新SQL Server 2016示例数据库