在Dao方法中如何写个求数据总和的方法

public int getMobileCount(Date createtime){
StringBuilder sql= new StringBuilder();
sql.append("SELECT COUNT(APPLY.ID) FROM A ");
sql.append("INNER JOIN B ON (A.INTEGRATEACTIVITY = B.ID)");
sql.append("WHERE A.SOURCETYPE IN ('iPhone', 'Android') ");
sql.append("AND A.CREATETIME >= TO_DATE(B.STARTTIME, 'YYYY-mm-dd') ");
sql.append("AND A.CREATETIME <= TO_DATE(B.ENDTIME, 'YYYY-mm-dd') ");
Query query = this.getSession().createQuery(sql.toString());
query.setParameter("createtime", createtime);
return query.list().size();
}
请问这么对吗,求教

5个回答

这么做可以,但是浪费性能。我们可以用count sum等sql语句直接查询

ccl524
Sky灬Thunder 这样呀,谢谢了
4 年多之前 回复

建议使用 调用 存储过程方式获取汇总。上面的方法确实影响性能

ccl524
Sky灬Thunder 谢谢
4 年多之前 回复

在自定义接口中添加一个获取数据总数的方法,然后实现 比较好

ccl524
Sky灬Thunder 我这样写有错吗
4 年多之前 回复
 Query query = this.getSession().createQuery(sql.toString());
query.setParameter("createtime", createtime);
return query.list().size();//这个肯定有记录,count肯定返回1条记录

改为下面
int totalRows = ((Integer)this.getSession().createQuery(sql.toString()).uniqueResult()).intValue();  
另外,没看到占位符呀,query.setParameter("createtime", createtime);这条语句干什么用。
如果有用就
int totalRows = ((Integer)this.getSession().createQuery(sql.toString()).setParameter("createtime", createtime).uniqueResult()).intValue();  

danielinbiti
danielinbiti 回复Sky灬Thunder: 先去试试吧,如果有用,有时间来采纳一下
4 年多之前 回复
ccl524
Sky灬Thunder 谢谢呀
4 年多之前 回复

return query.list().size();//这个返回count使用int就可以了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问