2007-07-13
多表同结构的Native sql查询
查询中相同结构的表
比如销售纪录的表
一天生成一个或者别的方式生成,结构相同,我们可以把他作为一个表做一个mapping和一个bean
比如销售信息SellInfo
在dao中用native sql统计查询(普通的查询我就不说了)
比如销售纪录的表
一天生成一个或者别的方式生成,结构相同,我们可以把他作为一个表做一个mapping和一个bean
比如销售信息SellInfo
在dao中用native sql统计查询(普通的查询我就不说了)
/**
* 单店统计查询
* @param tableName 查询表名
* @param sellInfo 查询例子
* @param startTime 开始时间
* @param finishTime 结束时间
* @param sumBy 按什么求和
* @param groupBy 按什么分组
* @return 数量 项目
*/
public List queOneShopGrp(String tableName,SellInfo sellInfo,Date startTime,Date finishTime,String sumBy,String groupBy)
{
Session session = this.getSession();
StringBuffer sql = new StringBuffer();
sql.append("select sum(S.");
sql.append(sumBy);
sql.append(") as sumMoney,S.");
sql.append(groupBy);
sql.append(" as foodName from ");
sql.append(tableName);
sql.append(" S where");
if(sellInfo!=null)
{
sql.append(this.getExampleStringS(sellInfo));
}
sql.append(" S.sellTime between :startTime and :finishTime ");
sql.append("group by S.");
sql.append(groupBy);
System.out.println(sql.toString());
Query query = session.createSQLQuery(sql.toString())
.addScalar("sumMoney", Hibernate.DOUBLE)
.addScalar("foodName", Hibernate.STRING)
.setDate("startTime", startTime)
.setDate("finishTime", finishTime);
return query.list();
}
评论
antonyup_2006
2007-11-07
数据表的整合,定时去把一些表整合到一个表或几个表,可以考虑用job,定时去后台整合,而代码里只要操作整合好后的表就可以了.这样不用在代码里去整合!
movingboy
2007-11-07
看起来数据量很大啊,得每天一表~~~
那你再根据常用的统计时段为每个时段建一个表,比如每月一表,该表的数据由每月各天的数据sum而来(sum的工作可以考虑在不繁忙的适当的时候干),这样查询/统计该月的数据只需要访问该表
真要提供高度灵活的查询时段供用户选择(比如查询/统计任意两天之间的销量),你可有苦头可吃了~~~
那你再根据常用的统计时段为每个时段建一个表,比如每月一表,该表的数据由每月各天的数据sum而来(sum的工作可以考虑在不繁忙的适当的时候干),这样查询/统计该月的数据只需要访问该表
真要提供高度灵活的查询时段供用户选择(比如查询/统计任意两天之间的销量),你可有苦头可吃了~~~
抛出异常的爱
2007-11-06
用这种方式的话,小心sql注入
laiseeme
2007-07-13
比如说,我要查5天的数据,可以把这5天对应的5个表full union成一个视图,这样就能同时检索这5个表,象使用一个表一样,但是有个问题,在使用sql2000的时候有个限制,最多可以操作260个表......
laiseeme
2007-07-13
另外一种解决方式是使用视图,把你要检索的数据的表在检索前生成一个view,这个wiew就叫一个名字
比如我这个叫SellInfo,对这个视图进行映射,这样你就不用使用native sql进行查询了,可以直接使用QBC检索,当然了,要把
cache.use_query_cache设置成false,否则可能cache中的数据和视图中的数据不一致
比如我这个叫SellInfo,对这个视图进行映射,这样你就不用使用native sql进行查询了,可以直接使用QBC检索,当然了,要把
cache.use_query_cache设置成false,否则可能cache中的数据和视图中的数据不一致
laiseeme
2007-07-13
在使用native sql做普通查询的时候,是不是lasy就不起作用了,因为我设置了lazy="true"的字段还是在检索的时候一起被取出来放bean里面了
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里面
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里面
laiseeme
2007-07-13
还有生成where句子的函数
/**
* 生成根据例子类的where子句
* @param sellInfo
* @return
*/
public String getExampleStringS(SellInfo sellInfo)
{
StringBuffer sql = new StringBuffer();
if(sellInfo.getUserName()!=null)
{
sql.append(" S.userName = '");
sql.append(sellInfo.getUserName());
sql.append("' and");
}
if(sellInfo.getFoodId()!=null)
{
sql.append(" S.foodId = '");
sql.append(sellInfo.getFoodId());
sql.append("' and");
}
if(sellInfo.getClassId()!=null)
{
sql.append(" S.classId = '");
sql.append(sellInfo.getClassId());
sql.append("' and");
}
if(sellInfo.getPosId()!=null)
{
sql.append(" S.posId = '");
sql.append(sellInfo.getPosId());
sql.append("' and");
}
//去掉最后一个and
//return sql.substring(0, (sql.length()-3));
return sql.toString();
}
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 13366 次
- 性别:

- 来自: 沈阳

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
问个处理在什么阶段生成js ...
我们controller层,一方面需要控制json的格式,控制具体哪些数据,比如 ...
-- by kebo -
问个处理在什么阶段生成js ...
没有硬性规定,从显示与逻辑分离的角度,放在controller那层,用filte ...
-- by nickcen -
问个处理在什么阶段生成js ...
SERVICE不应该参与json的处理。
-- by stworthy -
问个处理在什么阶段生成js ...
serveice就处理业务吧,数据组织放在controller里
-- by fantasybei -
问个处理在什么阶段生成js ...
你的意思是你在service生成对象 然后在控制层将数据写入json对象么?
-- by laiseeme






评论排行榜