多表同结构的Native sql查询
查询中相同结构的表
比如销售纪录的表
一天生成一个或者别的方式生成,结构相同,我们可以把他作为一个表做一个mapping和一个bean
比如销售信息SellInfo
在dao中用native sql统计查询(普通的查询我就不说了)
2 楼 laiseeme 2007-07-13 拼出来的sql语句是
select sum(S.smallTotal) as sumMoney,S.foodName as foodName from XC_2007_0240_001 S where S.foodId = '001' and S.sellTime between ? and ? group by S.foodName
这里要注意的是
# Query query = session.createSQLQuery(sql.toString())
# .addScalar("sumMoney", Hibernate.DOUBLE)
# .addScalar("foodName", Hibernate.STRING)
这里,一定对你每个要查询的起个别名,而且对每个数据要要加上.addScalar,要不然他会将数据淫塞到bean里面 3 楼 laiseeme 2007-07-13 在使用native sql做普通查询的时候,是不是lasy就不起作用了,因为我设置了lazy="true"的字段还是在检索的时候一起被取出来放bean里面了 4 楼 laiseeme 2007-07-13 另外一种解决方式是使用视图,把你要检索的数据的表在检索前生成一个view,这个wiew就叫一个名字
比如我这个叫SellInfo,对这个视图进行映射,这样你就不用使用native sql进行查询了,可以直接使用QBC检索,当然了,要把
cache.use_query_cache设置成false,否则可能cache中的数据和视图中的数据不一致 5 楼 laiseeme 2007-07-13 比如说,我要查5天的数据,可以把这5天对应的5个表full union成一个视图,这样就能同时检索这5个表,象使用一个表一样,但是有个问题,在使用sql2000的时候有个限制,最多可以操作260个表...... 6 楼 抛出异常的爱 2007-11-06 用这种方式的话,小心sql注入 7 楼 movingboy 2007-11-07 看起来数据量很大啊,得每天一表~~~
那你再根据常用的统计时段为每个时段建一个表,比如每月一表,该表的数据由每月各天的数据sum而来(sum的工作可以考虑在不繁忙的适当的时候干),这样查询/统计该月的数据只需要访问该表
真要提供高度灵活的查询时段供用户选择(比如查询/统计任意两天之间的销量),你可有苦头可吃了~~~ 8 楼 antonyup_2006 2007-11-07 数据表的整合,定时去把一些表整合到一个表或几个表,可以考虑用job,定时去后台整合,而代码里只要操作整合好后的表就可以了.这样不用在代码里去整合!