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會在每次查詢的時候內省查詢結果來設置元數據,來保證返回恰當的結果。這個屬性會造成一定的性能損失,所以要謹慎使用,只在你需要的時候使用.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。