ibatis 当查询的结果集列明动态变化时,需要在select等标签上加上 remapResults="true"属性.

eg:

    <!-- 根据给定的参数查询出对应的月度活跃用户数据 -->
    <select id="listActiveStaffReportByMap" parameterClass="java.util.Map" resultClass="java.util.HashMap" remapResults="true">
        select uir.REGION_NAME   as PROVINCENAME,
               uir2.REGION_NAME  as CITYNAME,
               ist.STORE_ID      as STOREID,
               ist.STORE_NAME    as STORENAME,
               ist.STORE_ADDRESS as STOREADDR,
               uip.PLACE_NAME    as STOREPLACENAME,
               isf.STAFF_NAME    as STAFFNAME,
               isf.STAFF_MOBILE  as STAFFMOBILE,
               isf.STAFF_CODE    as STAFFID,
               isf.STAFF_STATUS  as STAFFSTATUS,
               sabms.*
          from ($staffActiveSql$) sabms
     left join INFO_STAFF isf      on sabms.STAFF_ID   = isf.STAFF_ID
     left join INFO_STORE ist      on isf.STORE_ID     = ist.STORE_ID
     left join UI_INFO_REGION uir  on ist.PROVINCE_ID  = uir.REGION_ID
     left join UI_INFO_REGION uir2 on ist.CITY_ID      = uir2.REGION_ID
     left join UI_INFO_PLACE uip   on ist.PLACE_ID     = uip.PLACE_ID
          <dynamic prepend="where">
                <isNotNull property="provinceId" prepend="and">
                        uir.REGION_ID = #provinceId#
                </isNotNull>
                <isNotNull property="cityId" prepend="and">
                        uir2.REGION_ID = #cityId#
                </isNotNull>
          </dynamic>
    </select>

这个查询的一部分是在服务器端拼成的staffActiveSql,,作为map参数的一部分传进来..一个是因为 这个子查询比较复杂,,再有就是为了可以复用.配置文件中的这个<select>..

本来以为一切正常,当我在点击使用了这个<select>的功能后,又去测试另一个类似的同样使用的该<select>的功能,,结果报异常了..(又是该死的列明无效...之前查询的时候也报过这个异常,是因为as别名使用了Oracle的关键字..)

原因:iBATIS会在每次查询的时候内省查询结果来设置元数据,来保证返回恰当的结果。这个属性会造成一定的性能损失,所以要谨慎使用,只在你需要的时候使用.

时间: 2024-10-21 15:43:11

ibatis 当查询的结果集列明动态变化时,需要在select等标签上加上 remapResults="true"属性.的相关文章

ibatis 取消查询动态列的缓存

ibatis在查询结果列不确定(或是动态变化)的情况下,会因为列缓存的原因导致变化后的列数据查不出来 解决方法是: select标签有个属性remapResults,该属性默认值为false,设置成remapResults="true",即可解决 <select id="selectTableDataListByPage" resultClass="java.util.HashMap" parameterClass="create

使用 PIVOT 和 UNPIVOT实现查询结果行转列

语法: SELECT <非透视的列>, [第一个透视的列] AS <列名称>, [第二个透视的列] AS <列名称>, ... [最后一个透视的列] AS <列名称>, FROM (<生成数据的 SELECT 查询>) AS <源查询的别名> PIVOT ( <聚合函数>(<要聚合的列>) FOR [<包含要成为列标题的值的列>] IN ( [第一个透视的列], [第二个透视的列], ... [最后

在 SELECT 查询中使用集运算符

在 SELECT 查询中使用集运算符,可以将来自两个或多个查询的结果合并到单个结果集中. 在进行集运算之前,请确保: (1)所有输入集合中,列数和列的顺序必须相同. (2)对应的列中,数据类型必须兼容. 可以在一个查询中使用多个集运算符,运算时基于以下的优先级: (1)包含在括号中的表达式. (2)INTERSECT 运算符 (3)从左到右求值的 EXCEPT 和 UNION 一.UNION 和 UNION ALL UION 和 UNION ALL 用于合并两个输入查询的结果.如果某一行出现在任

使用MapReduce查询Hbase表指定列簇的全部数据输入到HDFS(一)

package com.bank.service; import java.io.IOException; import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.conf.Configured;import org.apache.hadoop.fs.Path;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hba

使用hibernate原生sql查询,结果集全为1的问题解决

问题如下: String sqlTest ="select summary,summaryno from F_Summary"; List<Map<Object, Object>> listTest = this.getService().getListBySql(sqlTest); for (Map<Object, Object> m : listTest) { for (Object k : m.keySet()) { System.out.pr

SQL查询语句行转列横向显示

SQL查询语句行转列横向显示 2011-03-15 10:00:14|  分类: sql |  标签:resource   |举报 |字号大中小 订阅 在SQL查询语句行转列横向显示中access中没有CASE,要用IIF代替 select  iif(sex= '1 ', '男 ', '女 ')  from  tablename 示例1: select country, sum(case when type='A' then money end) as A, sum(case when type

MySQL查询结果行转列、列转行

一.行转列 有如图所示的表,现在希望查询的结果将行转成列 建表语句如下: CREATE TABLE `TEST_TB_GRADE` ( `ID` int(10) NOT NULL AUTO_INCREMENT, `USER_NAME` varchar(20) DEFAULT NULL, `COURSE` varchar(20) DEFAULT NULL, `SCORE` float DEFAULT '0', PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCR

查询自动生成Guid列

--newid()可以在查询的时候自动生成Guid列 select top 10 *,newid() as Random from ywle where ywlename='001' ordey by Random --创建对应的列 用 uniqueidentifier 类型 IF NOT EXISTS ( SELECT * FROM dbo.SysObjects WHERE ID = object_id(N'[RMA_ExchangeOrderAddTempInfo]') AND OBJECT

如何在子查询中实现多列过滤

什么是子查询: 当一个查询是另外一个查询的条件,称之为子查询. 常见子查询使用场景: 1.使用子查询可以避免由于子查询中的数据产生的重复. 2.使用子查询更符合语义,更好理解 -- 子查询user_id 重复时,不会导致结果重复 select user_name from qujing where id in (select user_id from user_kills); -- 使用join时,会重复 select a.user_name from qujing a join user_ki