论坛首页 入门技术论坛

请教关于动态查询表返回用resultClass="java.util.HashMap" 的问题

浏览 6683 次
该帖已经被评为新手帖
作者 正文
   发表时间:2008-07-29  
用spring+ibatis写了一个登陆页面输入表名 然后在页面查询出表的数据,

sql配置文件
</select>
<select id="getTableDataByPage" resultClass="java.util.HashMap" parameterClass="java.util.HashMap">
<![CDATA[
select * from (select rownum id,t.* from
$tableName$ t where rownum<= #endNum# ) b where b.id>= #startNum#
  ]]>
</select>

第一次运行服务器输入一个表名可以查询出表的所有信息,退出返回到登陆页面重新输入一个表名查询就会出错
日志显示:
Cause: java.sql.SQLException: 列名无效
com.ibatis.common.jdbc.exception.NestedSQLException:  
--- The error occurred in com/zf/querytest/bo/impl/tableDao.xml. 
--- The error occurred while applying a result map. 
--- Check the tableDao.getTableDataByPage-AutoResultMap. 
--- Check the result mapping for the 'TASKID' property. 

其中TASKID为上一张表中的字段,也就是ResultMap中保留了上个表的字段信息,将sqlMapClient中的cacheModelsEnabled设置为"false"也不行
请问我要怎样修改才能在重新输入表名后查询后返回新的表的结果了,请大家帮帮忙,谢谢


   发表时间:2008-07-31  
我也遇到了这个问题,使用了两个解决方法,问题仍然存在,请帮忙啊。

我的解决方法:
1、使用cacheModel
	<cacheModel id="pagedData-cache" type="MEMORY">
		<flushInterval milliseconds="1" />
		<flushOnExecute statement="getPagedData"/>
	</cacheModel>
	<select id="getPagedData" cacheModel="pagedData-cache"
		resultClass="java.util.HashMap" parameterClass="java.util.HashMap">
		<![CDATA[
		select t.$fieldName$ from ( select rownum r, o.$fieldName$ from
		(select $fieldName$ from $tableName$ where $whereClause$
		$fieldSort$) o where rownum <= #pageIndex# * #pageSize# ) t
		where t.r > (#pageIndex#-1) * #pageSize#
		]]>
	</select>


2、使用SqlMapClient
			SqlMapClient sqlMapClient = (SqlMapClient) ac
					.getBean("sqlMapClient");
			sqlMapClient.flushDataCache();
			totalResultList = sqlMapClient.queryForList("getPagedData", map);
0 请登录后投票
   发表时间:2008-07-31  
节选(iBatis-sqlMaps-2)文档供你参考
Map类型的Result
Result Map也可以方便为一个Map(如HashMap或TreeMap)对象赋值。使用下面讨论的API(参见executeQueryForList()),还可以得到Map对象的集合(即Map的List)。Map对象与Java Bean同样的方式映射,只是使用name属性值作为Map的键值,用它来索引相应的数据库字段值,而不是象Java Bean一样给属性赋值。例如,如果您要将Product对象的数据装入Map,可以这样做:
<resultMap id=”get-product-result” class=”java.util.HashMap”>
<result property=”id” column=”PRD_ID”/>
<result property=”code” column=”PRD_CODE”/>
<result property=”description” column=”PRD_DESCRIPTION”/>
<result property=”suggestedPrice” column=”PRD_SUGGESTED_PRICE”/>
</resultMap> http://www.ibatis.com Clinton Begin 著 刘涛(toleu@21cn.com) 译
开发指南 iBATIS SQL Maps Page 32 of 62
上面的例子会创建一个HashMap的实例并用Product的数据赋值。Property的name属性值(即“id”)作为HashMap的键值,而列值则作为HashMap中相应的值。
当然,可以把Map类型Result和隐式的Result Map一起使用。例如:
<statement id=”getProductCount” resultClass=”java.util.HashMap”>
select * from PRODUCT
</statement>


按文档的意思,HashMap还不能直接做到把表字段映射成Key,还需要通过resultMap申明
0 请登录后投票
   发表时间:2008-07-31  
终于搞定啦


<sqlMap namespace="PagedData">
<select id="getPagedData" remapResults="true"
resultClass="java.util.HashMap" parameterClass="java.util.HashMap">

即加入remapResults="true"即可
remapResults这个属性在iBATIS SQL Maps开发指南 上都找不到
用google“ibatis 缓存 字段”找到了http://blog.csdn.net/hety/archive/2006/01/26/588749.aspx
0 请登录后投票
   发表时间:2008-07-31  
Nick_HF 写道
节选(iBatis-sqlMaps-2)文档供你参考
Map类型的Result
Result Map也可以方便为一个Map(如HashMap或TreeMap)对象赋值。使用下面讨论的API(参见executeQueryForList()),还可以得到Map对象的集合(即Map的List)。Map对象与Java Bean同样的方式映射,只是使用name属性值作为Map的键值,用它来索引相应的数据库字段值,而不是象Java Bean一样给属性赋值。例如,如果您要将Product对象的数据装入Map,可以这样做:
<resultMap id=”get-product-result” class=”java.util.HashMap”>
<result property=”id” column=”PRD_ID”/>
<result property=”code” column=”PRD_CODE”/>
<result property=”description” column=”PRD_DESCRIPTION”/>
<result property=”suggestedPrice” column=”PRD_SUGGESTED_PRICE”/>
</resultMap> http://www.ibatis.com Clinton Begin 著 刘涛(toleu@21cn.com) 译
开发指南 iBATIS SQL Maps Page 32 of 62
上面的例子会创建一个HashMap的实例并用Product的数据赋值。Property的name属性值(即“id”)作为HashMap的键值,而列值则作为HashMap中相应的值。
当然,可以把Map类型Result和隐式的Result Map一起使用。例如:
<statement id=”getProductCount” resultClass=”java.util.HashMap”>
select * from PRODUCT
</statement>


按文档的意思,HashMap还不能直接做到把表字段映射成Key,还需要通过resultMap申明


我的lz使用的方法需要返回不同的字段,tablename也是可选的,如第一次查了user表的数据,就缓存了诸如username的字段,第二次查type表,没有username字段,则会报错找不到username字段
0 请登录后投票
   发表时间:2008-11-03  
sysuxk 写道
终于搞定啦


<sqlMap namespace="PagedData">
<select id="getPagedData" remapResults="true"
resultClass="java.util.HashMap" parameterClass="java.util.HashMap">

即加入remapResults="true"即可
remapResults这个属性在iBATIS SQL Maps开发指南 上都找不到
用google“ibatis 缓存 字段”找到了http://blog.csdn.net/hety/archive/2006/01/26/588749.aspx


谢谢你

有了你,我们就幸福多了
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics