黑马程序员技术交流社区

标题: ssh如何实现分页,求各位大神给出详细的思路谢谢 [打印本页]

作者: lilin202011    时间: 2014-4-3 22:56
标题: ssh如何实现分页,求各位大神给出详细的思路谢谢
ssh如何实现分页技术,把具体思路和大概的实现方法解释一遍,在此谢过了
作者: muma    时间: 2014-4-3 23:39
  1. public interface MemberDao{
  2.      
  3.     //省略了其他的代码
  4.      
  5.     /** *//**
  6.      * 分页查询
  7.      * @param hql 查询的条件
  8.      * @param offset 开始记录
  9.      * @param length 一次查询几条记录
  10.      * @return
  11.      */
  12.     public List queryForPage(final String hql,final int offset,final int length);
  13.      
  14.     /** *//**
  15.      * 查询所有记录数
  16.      * @param hql 查询的条件
  17.      * @return 总记录数
  18.      */
  19.     public int getAllRowCount(String hql);
  20. }
  21.          2.DAO层实现类MemberDaoImpl对上面两个方法的实现如下:         
  22. public class MemberDaoImpl extends HibernateDaoSupport implements MemberDao {
  23.        //省略了其他的代码   
  24.     /** *//**
  25.      * 分页查询
  26.      * @param hql 查询的条件
  27.      * @param offset 开始记录
  28.      * @param length 一次查询几条记录
  29.      * @return
  30.      */
  31.     public List queryForPage(final String hql,final int offset,final int length){
  32.         List list = getHibernateTemplate().executeFind(new HibernateCallback(){
  33.             public Object doInHibernate(Session session) throws HibernateException,SQLException{
  34.                 Query query = session.createQuery(hql);
  35.                 query.setFirstResult(offset);
  36.                 query.setMaxResults(length);
  37.                 List list = query.list();
  38.                 return list;
  39.             }
  40.         });
  41.         return list;
  42.     }
  43.         /** *//**
  44.      * 查询所有记录数
  45.      * @return 总记录数
  46.      */
  47.     public int getAllRowCount(String hql){
  48.         return getHibernateTemplate().find(hql).size();
  49.     }
  50. }
复制代码
分页显示一直是web开发中一大烦琐的难题,传统的网页设计只在一个JSP或者ASP页面中书写所有关于数据库操作的代码,那样做分页可能简单一点,但当把网站分层开发后,分页就比较困难了,下面是我做Spring+Hibernate+Struts2项目时设计的分页代码,与大家分享交流。
DAO层接口的设计,在MemberDao接口中定义了如上两个代码方法:

作者: lilin202011    时间: 2014-4-5 09:51
muma 发表于 2014-4-3 23:39
分页显示一直是web开发中一大烦琐的难题,传统的网页设计只在一个JSP或者ASP页面中书写所有关于数据库操作 ...

你还没写完
作者: 残梦共飞雪    时间: 2014-4-5 10:10
分页操作是把数据根据条件查询数据库,获取到指定数据然后显示。
若每页30,第一页就是1-30,第5页就是121-150

在SQLserver中,每页30条,则第一页是top(30)。
ORACLE则是运用伪列。
一个hibernate分页
  1. public class CommomsDAO {
  2.     private static final Log log = LogFactory.getLog(EcOpusDAO.class);
  3.     //获得会话
  4.     private static HibernateTemplate hibernateTemplate = new HibernateTemplate(HibernateSessionFactory.getSessionFactory());
  5.    
  6.    
  7.     /** *//**
  8.      * 分页通用方法
  9.      * @param hql  HQL查询语句
  10.      * @param offset    起始记录下标
  11.      * @param lengh        读取记录数
  12.      * @return            List 结果集
  13.      */
  14.     public static List getListForPage(final String hql, final int offset, final int lengh) {
  15.         log.debug("finding ListForPage");
  16.         try {
  17.             List list = hibernateTemplate.executeFind(new HibernateCallback(){

  18.                 public Object doInHibernate(Session session)
  19.                         throws HibernateException, SQLException {
  20.                     List list2 = session.createQuery(hql)
  21.                             .setFirstResult(offset)
  22.                             .setMaxResults(lengh)
  23.                             .list();                    
  24.                     return list2;
  25.                 }});
  26.             return list;
  27.         } catch (RuntimeException re) {
  28.             log.error("find ListForPage failed", re);
  29.             throw re;
  30.         }
  31.     }
  32. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2