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();
}
请问这么对吗,求教
这么做可以,但是浪费性能。我们可以用count sum等sql语句直接查询
建议使用 调用 存储过程方式获取汇总。上面的方法确实影响性能
在自定义接口中添加一个获取数据总数的方法,然后实现 比较好
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();
return query.list().size();//这个返回count使用int就可以了