hql和sql执行查询count和指定字段并获取结果集
有一天,兴致勃勃做毕设的最后一点功能。
“怎么获取corders表中decorateModeId字段数量大于0的decorateModeId字段的列表集合?”
很拗口是不是,corders是我的一个商品订单列表,就是顾客已经买了之后的一个关于发货的一个数据库表:
就是这样的,姐妹!
还有一个decoratemode表:
然后我要查找出在corders表decorateModeId数量多于01的decorateModeId字段,然后根据decorateModeId字段去decoratemode查找Decoratemode类对象返回。
没之前第二句那么拗口对不对,姐妹!
我用的是SSH框架做的系统,你们懂,就是Strust2+Spring3.1.1+Hibernate4.1.4.
代码来了:
@Override
public List<Decoratemode> getRecommendDecorate
(int currentPage, int pageSize) {
// TODO Auto-generated method stub
Session session = getSession();
Transaction transaction = session.beginTransaction();
Session session1 = getSession();
Transaction transaction1 = session1.beginTransaction();
Query query = session.createSQLQuery
("select count(*),decorateModeId "
+ "from corders group by decorateModeId "
+ "having count(*)>0");//使用sql的createSQLQuery查询通过decorateModeId分组的count值和decorateModeId字段;
int startRow=(currentPage-1)*pageSize;
query.setFirstResult(startRow);
query.setMaxResults(pageSize);//分页处理
List<Object[]> object = query.list();
Map map = null;
if(object!=null&&object.size()>0){
map = new HashMap();
for(int j=0;j<object.size();j++){
map.put(j,object.get(j)[1]);//获取的count,decorateModeId的数组,取decorateModeId的值放在map中
}
}
transaction.commit();
List<Decoratemode> decoratemodes=new ArrayList<Decoratemode>();
for(int i=0;i<object.size();i++){
System.out.println(map.get(i)+",");
Query query1 = session1.createQuery
("from Decoratemode where decorateModeId='"+map.get(i)+"'");//取出map的decorateModeId值在decoratemode表中查询
List<Decoratemode> d=query1.list();
Decoratemode dm=new Decoratemode();//这个一定得加,不然会覆盖之前add在list列表的对象
dm=d.get(0);
decoratemodes.add(dm);//把所有符和条件的都加入list列表中
}
transaction1.commit();
session.close();
session1.close();
return decoratemodes;
}知识点姐们!!!
除了有sql和hql结合count和字段查询
还有list在循环语句中添加对象在末尾