经过几天业余时间的研究,已经做了一套关于分页的高效解决方案,所谓的高效,就是在数据库底层,也做了分页查询,因此在进行大数据量的查询时,速度会很快。如果不做底层的分页的话,数据量超过5W,速度将会慢的象乌龟一样。
这套解决方案,是按照MVC的模式来做的,基于STRUTS框架。分为三个部分,表现层用的是JSP,其中用了JSTL和pager taglib做分页;控制层就是用的很传统的Action;底层就用的是Spring+Hibernate。下面分三个部分慢慢说:
一、底层:
底层是基于Spring+Hibernate来做的。在DAO这一层,为其增加两个方法,一个方法为根据HQL语句和条件进行查询,另外一个方法为根据HQL语句、条件、开始的记录位置,共显示的记录数进行分页查询。底层的分页查询用的是Hibernate提供的分页查询。
方法体如下所示:
java 代码
- public List findByCondition(String sql,Object[] parems){
- List result = new ArrayList();
- try{
- result = getHibernateTemplate().find(sql,parems);
- }catch(RuntimeException re){
- re.printStackTrace();
- }
- return result;
- }
- public List findByCondition(String sql,Object[] parems,int first,int max){
- List result = new ArrayList();
- try{
- Session sess = getSession();
- Query query = sess.createQuery(sql);
- for(int i = 0;i<parems.length;i++){
- if(parems[i] instanceof Integer){
- query.setInteger(i,((Integer)parems[i]).intValue());
- }
- if(parems[i] instanceof String){
- query.setString(i,parems[i].toString());
- }
- }
- query.setFirstResult(first);
- query.setMaxResults(max);
- result = query.list();
- }catch(RuntimeException re){
- re.printStackTrace();
- }
- return result;
- }