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