请教一个典型的struts和hibernate结合查询数据库的技术问题,帮帮我,谢谢你.
下面的代码中我用hibernate查询出我想要的结果集A,在for循环内,还有一个查询语句B(红色代码所示).这样,A结果集中有多少条数据那么B语句就会执行多少次,因为它依赖于A结果集.这样一来.我的这段代码的效率就很低.
请问一下高手,有没有一种更好的方法实现我的这种功能.多谢了.
public Page findWorklistAlterPage(int currentPage) throws Exception {
StringBuffer sb=null;
Page page=null;
sb = new StringBuffer("select A.id,A.pactId,A.applicationperson,A.auditperson,A.alterationdate,W.worklistname,P.pactName,A.alterationId from Alterationmanage as A,Worklist as W,Pact as P where 1=1 ");
sb.append("and A.alterationId=W.id ");
sb.append("and P.id=A.pactId");
int pageSize;
pageSize = com.chinantn.oa.config.Globals.pageSize;
List newlist = new ArrayList();
String hql=null;
sb.append(" AND W.state='01'");
sb.append(" AND W.deleted='00'");
sb.append(" ORDER BY A.alterationdate desc");
hql=sb.toString();
try {
//查询数据库
page = dao.findWorklistAlterPage(hql, currentPage, pageSize);
} catch (Exception e) {
e.printStackTrace();
}
List list = page.getList();//list存放结果集
Object[] obj;
PayAmountManager pam=ManagerFactory.getPayAmountManager();
List alist=pam.getPayAmountList();
//遍历结果集,想在页面上显示
for (int i = 0; i < list.size(); i++) {
HashMap map = new HashMap();
obj = (Object[])list.get(i);
map.put("id", (String)obj[0]);
map.put("pactId",obj[1]);
map.put("applicationperson", obj[2]);
map.put("auditperson", obj[3]);
map.put("alterationdate", obj[4]);
map.put("worklistname", obj[5]);
map.put("pactName",obj[6]);
map.put("alterationId", obj[7]);
//下面的语句是从数据库中得到的.在循环内,是不是太慢了.但是它还得在循环内,因为它的结果 集 是随A结果集变化还变化的.
Pact pact=ManagerFactory.getPactManager().findById((String)obj[1]);
String finishFlag=pact.getFinishflag();
map.put("finishFlag", finishFlag);
for(int j=0;j<alist.size();j++) {
PayAmount pa=(PayAmount)alist.get(j);
String worklistId=pa.getWorklistId();
if(((String)map.get("alterationId")).equals(worklistId)) {
map.put("flag", "noShow"); //是否已对该工程量清单做过计量
}
}
newlist.add(map);
}
page.setList(newlist);
return page;
}