Hibernate 读取结果集的两种办法

本文介绍了两种使用Hibernate HQL查询的方式,并对比了它们在DAO层和JSP层的表现。第一种方式通过转换查询结果为基于Map的List来提高代码的可读性和维护性。第二种方式虽然DAO层代码更为简洁,但在JSP层中使用时不如第一种直观。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://xuchenguang.blog.51cto.com/730272/398952


第一种:推荐:

DAO层的Hql语句如果用From.....执行出来的是一个基于Map结构的List,而用select.........执行出来的结果不是Map型的,为了方便使用、维护修改,将其转为基于Map的List。

DAO层代码如下: 

public List getSlCountList(Integer year, Integer month, String office) {  
    Session session = getSession();  
    String hql="SELECT office,count(*) as myCount from ReportMonth " 
        + "Where (year = ?) AND (month = ?) And (office like ?) And(slsn <>'') " 
        + "Group by office";  
    List list = null;  
    List newList=new ArrayList();  
    Object[] obj;  
    try {  
        Query query = session.createQuery(hql);  
        query.setParameter(0, year);  
        query.setParameter(1, month);  
        query.setParameter(2, "%" + office + "%");  
        list = query.list();  
        for(int i=0;i<list.size();i++){  
            Map map = new HashMap();  
            obj = (Object[])list.get(i);  
            map.put("office", (String)obj[0]);  
            map.put("myCount", (Integer)obj[1]);  
            newList.add(map);  
        }  
          
     } catch (HibernateException e1) {  
         newList=null;  
        e1.printStackTrace();  
    }  
    finally{              
        session.close();  
    }  
    return newList;  
}  

JSP部分代码如下:  

<ww:iterator value="#request['slCountList']" id="slCountList">  
  <tr class="tr0">  
      <td height="26" width="15%"> <ww:property value="#slCountList.office"/>  
.................. 

第二种:DAO代码简洁,但是在JSP中用obj[0]obj[1]表示,感觉不好,晦涩。

 DAO:

public List getSlCountList(Integer year, Integer month, String office) {  
    Session session = getSession();  
    String hql="SELECT office,count(*) as myCount from ReportMonth " 
        + "Where (year = ?) AND (month = ?) And (office like ?) And(slsn <>'') " 
        + "Group by office";  
    List list = null;  
    try {  
        Query query = session.createQuery(hql);  
        query.setParameter(0, year);  
        query.setParameter(1, month);  
        query.setParameter(2, "%" + office + "%");  
        list = query.list();        
     } catch (HibernateException e1) {  
         list=null;  
        e1.printStackTrace();  
    }  
    finally{              
        session.close();  
    }  
    return list;  
}  

JSP:

<ww:iterator value="#request['slCountList']" id="slCountList">  
        <tr class="tr0">  
            <td height="26" width="15%"> <ww:property value="#slCountList[0]"/><B><font color="red">(<ww:property value="#slCountList[1]"/>座)</font></B></td>  
            <td width="90%">  
....................... 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值