不知道我乱七八糟想的这些可不可行,也不知道实际应用中,人家都是怎么用的,反正我今天折腾了一种方法,分享一下.
首先的数据呢,很多,所以要考虑分页.
然后是用的hibernate的分页技术,既然用了就用了,谁怕谁,真是的.
主要个流程是这样的:
首先管理员登陆系统后,应该是上面有查询的选择,下面首先应该显示出来所有的记录,当然要用分页.像是这样:
然后呢,提交查询条件后,下面显示对应的查询结果.
我后来就想一想呀,应该要把全部查询和条件查询分开的,主要是为了在分页的时候点击上一页下一页的时候可以不混起来.
怎么实现的呢
这样:条件查询的情况,我会传一个cmd=inquiry过去,判断有这个值的话,说明是条件查询显示,如果是第一次查,也就是说点击查询按钮的时候,我先转到一个action里面,将查询的条件记录下来,我的方法是放到session里面,放到session里面的主要目的是为了后面点击下一页或者是上一页的时候去获取当时的查询条件.如果不是第一次条件查询,那么说明session里面已经存了查询条件的内容,这个时候直接在session里面取出来进行分页查询就可以了.
如果cmd是空,就是全部查询,如果不是空,就是条件查询的,嘻嘻.
记录一下主要代码:
public class Inquiry extends ActionSupport{
List alulist;
String cmd;
HttpSession session;
//分页用
int curpage = 0;//当前页
int pagesize = 20;//每页显示的条数
int from;
int allrows;//所有的条数
int allpages;//共多少页
//多条件查询用
private String username;
private String xibie=null;
private String zhuanye;
private String ruxuetime;
private String gotime;
private String zhiji;
private String zhicheng;
public String execute(){
if("inquiry".equals(cmd)){
session = ServletActionContext.getRequest().getSession();
if(session.getAttribute("user")!=null){
username = (String) session.getAttribute("user");
}
if(session.getAttribute("xibie")!=null&&!session.getAttribute("xibie").equals("")){
xibie = (String) session.getAttribute("xibie");
}
if(session.getAttribute("zhuanye")!=null&&!session.getAttribute("zhuanye").equals("")){
zhuanye = (String) session.getAttribute("zhuanye");
}
if(session.getAttribute("ruxuetime")!=null&&!session.getAttribute("ruxuetime").equals("")){
ruxuetime = (String) session.getAttribute("ruxuetime");
}
if(session.getAttribute("gotime")!=null&&!session.getAttribute("gotime").equals("")){
gotime = (String) session.getAttribute("gotime");
}
if(session.getAttribute("zhiji")!=null&&!session.getAttribute("zhiji").equals("")){
zhiji = (String) session.getAttribute("zhiji");
}
if(session.getAttribute("zhicheng")!=null&&!session.getAttribute("zhicheng").equals("")){
zhicheng = (String) session.getAttribute("zhicheng");
}
allrows = AlumnusDAO.getRowsNumByInquiry(username,xibie,zhuanye,ruxuetime,gotime,zhiji,zhicheng);
allpages = allrows%pagesize==0?allrows/pagesize:allrows/pagesize+1;//共多少页
curpage = curpage<allpages?curpage:allpages;
curpage = curpage==0?1:curpage;
alulist = AlumnusDAO.getAllByInquiry(
username,xibie,zhuanye,ruxuetime,gotime,zhiji,zhicheng,curpage,pagesize);
}else{
allrows = AlumnusDAO.getRowsNum();//所有条数
allpages = allrows%pagesize==0?allrows/pagesize:allrows/pagesize+1;//共多少页
curpage = curpage<allpages?curpage:allpages;
curpage = curpage==0?1:curpage;
alulist = AlumnusDAO.getAll(curpage,pagesize);
}
return SUCCESS;
}
省了get/set方法哈.
最后记录一下hibernate查询的方法:
/**
* 查询情况下
*/
public static List getAllByInquiry(String username,String xibie,
String zhuanye,String ruxuetime,String gotime,String zhiji,String zhicheng,
int currentPage,int num){
Criteria criteria = getSession().createCriteria(Alumnus.class);
if(xibie!=null&&!xibie.equals("")){
criteria.add( Restrictions.like("xibie", "%"+xibie+"%" ));
}
if(zhuanye!=null&&!zhuanye.equals("")){
criteria.add(Restrictions.like("major", "%"+zhuanye+"%" ));
}
if(zhiji!=null&&!zhiji.equals("")){
criteria.add(Restrictions.eq("zhiji", zhiji ));
}
if(zhicheng!=null&&!zhicheng.equals("")){
criteria.add(Restrictions.eq("zhicheng", zhicheng ));
}
if(username!=null&&!username.equals("")){
String[] usernamelist = username.split(",");
criteria.add( Property.forName("name").in( usernamelist ) );
}
criteria.setFirstResult((currentPage-1)*num);//设置开始位置
criteria.setMaxResults(num);
return criteria.list();
}
我就是用拼音,真是的,嘻嘻嘻嘻~