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

 

转载于:https://www.cnblogs.com/mqyg/p/4108279.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值