问题:hibernate只查询全表中的2个或以上的字段,或者是两个表连接查询取部分字段,普通的struts2标签显示就不太方便了,老是取不出数据,他们是被放到了对象数组中……
查询hql:
String sql = "SELECT yearName,COUNT(*)as number FROM BasicInfo GROUP BY yearName";
使用hibernate查询保存到list中:list = getHibernateTemplate().find(sql);
传到页面后的jsp显示
方法一
<s:iterator value= "list " status="stat">
<s:property value= "list[#stat.index][0] " /> // 字段一 
<s:property value= "list[#stat.index][1] " /> // 字段二
<s:property value= "list[#stat.index][2] " /> // 字段三
</s:iterator>
方法二
<s:iterator value="list" status="stat" >
<s:property value="%{#stat[0]}" / > // 字段一
<s:property value="%{#stat[1]}" / > // 字段二
<s:property value="%{#stat[2]}" / > // 字段三
</s:iterator >
方法三
<s:iterator value="list" >
<s:property value="%{top[0]}" / > // 字段一
<s:property value="%{top[1]}" / > // 字段二
<s:property value="%{top[2]}" / > // 字段三
</s:iterator >
方法一、二均采用iterator迭代索引,取出对象中的相应字段;方法三运用值栈,top表示值栈中的当前元素。
缺点:使用0,1,2不能清楚的表示该字段的含义,界面上的可读性会降低。
注:该方法并不是我原创,在网上搜集到的,但是很有用!在这里感谢网友jonderhuang。
另外,yangxianjiangg给出另一种办法:
在hql中使用 select new 包名.类名(属性1,属性2……) from 实体类,同时在实体类中添加带参的构造方法,参数的个数和顺序与(属性1,属性2……) 保持一致,这样我们得到的list中存放的依然是实体类的对象,所查询到的属性得到了填充,使用起来更为方便。