ibatis 动态sql-热谱图(一)

这两天在对数据库的一个表分表:大体功能是做热谱图是有两张表,一张是:area_guest(每天有大量数据会传进来,要分表,大概是3个月要分一次比如area_guest201501,area_guest201504。。。。。以此类推),一张是area_dictionary (主要是商家的区域信息)
原sql是这样的:

<select id="getAreaGustByParam" resultMap="ibatorgenerated_BaseResultMap" parameterClass="java.util.HashMap" >
    select * from  area_guest
    where area_id in (select ad.id from area_dictionary ad where ad.mall_id=#mallId:INTEGER# and floor_code=#nowFloor:INTEGER#)
     <isNotNull  property="startTime" >
     and start_time &gt;=#startTime:TIMESTAMP#
    </isNotNull>
    <isNotNull property="endTime">
    and end_time &lt;=#endTime:TIMESTAMP#
    </isNotNull>
 </select>

分表后想写成的效果是这样:

select area_id,area_guest_num from  area_guest201504
LEFT JOIN    area_dictionary ad
on   area_guest.area_id=ad.id
AND ad.mall_id=1
AND ad.floor_code=1            
and area_guest201504.start_time >="2015-06-14 00:00:00"                     
and area_guest201504.end_time <="2015-07-01 12:00:00"            
union    
select area_id,area_guest_num from  area_guest201507
LEFT JOIN    area_dictionary ad
on   area_guest201507.area_id=ad.id
AND ad.mall_id=1
AND ad.floor_code=1          
and area_guest201507.start_time >="2015-06-14 00:00:00"                     
and area_guest201507.end_time <="2015-07-01 12:00:00" 

问题来了,这是一个静态sql,怎么变成动态的,经过一番努力结果如下:

<select id="getAreaGustByParam2" resultMap="ibatorgenerated_BaseResultMap2" parameterClass="java.util.HashMap" >
    <dynamic>
        <iterate property="list" conjunction="union">
        select area_id,area_guest_num from area_guest$list[].tablename$ 
        LEFT JOIN    area_dictionary ad
        on   area_guest$list[].tablename$.area_id=ad.id
        <isNotNull property="list">
        AND ad.mall_id=#list[].mallId:INTEGER#                     
        </isNotNull>
        <isNotNull property="list">
        AND ad.floor_code=#list[].nowfloor:INTEGER#                   
        </isNotNull>
        <isNotNull property="list">
        and area_guest$list[].tablename$.start_time &gt;=#list[].startTime:TIMESTAMP#                     
        </isNotNull>
        <isNotNull property="list">
        and area_guest$list[].tablename$.end_time &lt;=#list[].endTime:TIMESTAMP# 
        </isNotNull>            
        </iterate>
    </dynamic>
 </select>

还有参数是这样传的map.put(“list”,list);

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值