`

使用扩展HibernateDaoSupport实现分页技术总结

阅读更多
1.定义MyHibernateDaoSupport 扩展HibernateSupport

mport java.sql.SQLException;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class MyHibernateDaoSupport extends HibernateDaoSupport {
public List findByPage(final String hql,final int offset,final int pageSize)
{
   List list=this.getHibernateTemplate().executeFind(new HibernateCallback()
   {
    public Object doInHibernate(Session session)
      throws HibernateException, SQLException {
     List result=session.createQuery(hql).setFirstResult(offset).setMaxResults(pageSize).list();
     return result;
    }
   }
   );
   return list;
}
public List findByPage(final String hql,final String value,final int offset,final int pageSize)
{
   List list=this.getHibernateTemplate().executeFind(new HibernateCallback()
   {
    public Object doInHibernate(Session session)
      throws HibernateException, SQLException {
     List result=session.createQuery(hql).setParameter(0,value).setFirstResult(offset).setMaxResults(pageSize).list();
     return result;
    }
   }
   );
   return list;
}
public List findByPage(final String hql,final Object[] values,final int offset,final int pageSize){
   List list=this.getHibernateTemplate().executeFind(new HibernateCallback()
   {
    public Object doInHibernate(Session session)
      throws HibernateException, SQLException {
     Query query=session.createQuery(hql);
     for(int i=0;i<values.length;i++)
     {
      query.setParameter(i,values[i]);
     }
     List result=query.setFirstResult(offset).setMaxResults(pageSize).list();
     return result;
    }
   }
   );
   return list;
}
}


2.定义要分页的实体的Dao接口
如:
public interface StudentDao {
Student get(int id);
void save(Student student);
void update(Student student);
void delete(int id);
void delete(Student student);
List<Student> findAll();
List<Student> findAllByPage(int pageNo,int pageSize);
int getStudentCount();

List<Student> findStudentByNameAndNumber(String stuName,String stuNumber);
}
3.定义实现类
主要写出两个分页中要用到的方法
public List<Student> findAllByPage(int pageNo, int pageSize) {
   if(pageNo<1){
    return null;
   }
   int offset=(pageNo-1)*pageSize;
   return findByPage("from Student", offset, pageSize);
}
public int getStudentCount() {
   List<Student> listStudent=this.getHibernateTemplate().find("from Student");
   return listStudent.size();
}

4.定义Service接口
public interface ExamService {
int STUDENT_PAGE_SIZE=3;
int QUESTION_PAGE_SIZE=3;
int addStudent(String stuNumber,String name,String className,String humanId,String email,String address,String phone) throws Exception;
void deleteStudent(int id) throws Exception;
List<Student> listStudent(int pageNo) throws Exception;
int addQuestion(String quTitle,String quHard,String quScore,String quAnswer,String quType,String selectOption,int typeid) throws Exception;
void deleteQuestion(int id) throws Exception;
List<Question> listQuestion(int pageNo) throws Exception;
void deleteExamtype(int typeid) throws Exception;
int addExamtype(String textName,String testTime)throws Exception;
List<Examtype> getAllExamtype()throws Exception;
boolean adminLogin(String admName,String admPwd)throws Exception;
int getStudentCount()throws Exception;
int getQuestionCount()throws Exception;
int getPageCount(int count,int pageSize);
String studentLogin(String stuName,String stuNumber)throws Exception;
Question getNextQuestion(List<Integer> alreadys,int typeid)throws Exception;
Question getQuestionById(int id)throws Exception;
String getExamtypeName(int typeid)throws Exception;;
}
5.定义实现类
public int getPageCount(int count, int pageSize) {
   return (count+pageSize-1)/pageSize;
}
public int getStudentCount() throws Exception {
   return studentDao.getStudentCount();
}

public List<Student> listStudent(int pageNo) throws Exception {

   return studentDao.findAllByPage(pageNo, STUDENT_PAGE_SIZE);

}

6.ListStudentAction.java
int studentCount=examService.getStudentCount();
   ActionMessages errors=new ActionMessages();
   if(studentCount<1)
   {
    errors.add("studentCount",new ActionMessage("studentCount.null"));
    mapping.findForward("success");
   }
   int pageCount=examService.getPageCount(studentCount,examService.STUDENT_PAGE_SIZE);
   int pageNo;
   if(request.getParameter("pageNo")==null || request.getParameter("pageNo").trim().equals(""))
   {
    pageNo=1;
   }
   try {
    pageNo=Integer.parseInt(request.getParameter("pageNo").trim());
   } catch (Exception e) {
    pageNo=1;
   }
   if(pageNo>pageCount){
    pageNo=pageCount;
   }
   request.setAttribute("pageCount",pageCount);
   request.setAttribute("currentPage",pageNo);
   request.setAttribute("studentList", examService.listStudent(pageNo));
   return mapping.findForward("success");
7.listStudent.jsp

<table cellspacing="0" cellpadding="0" border="1" width="700">
   <tr>
    <th>
     <bean:message key="student.shenfenzheng" />
    </th>
    <th>
     <bean:message key="student.mingzi" />
    </th>
    <th>
     <bean:message key="student.banji" />
    </th>
    <th>
     <bean:message key="student.xuehao" />
    </th>
    <th>
     <bean:message key="student.youjian" />
    </th>
    <th>
     <bean:message key="student.dianhua" />
    </th>
    <th>
     <bean:message key="student.address" />
    </th>
    <th>
     <bean:message key="student.isdelete" />
    </th>
   </tr>
   <c:forEach items="${requestScope.studentList}" var="students">
    <tr>
     <td align="center">
      ${students.humanId}
     </td>
     <td align="center">
      ${students.stuName}
     </td>
     <td align="center">
      ${students.stuClassName}
     </td>
     <td align="center">
      ${students.stuNumber}
     </td>
     <td align="center">
      ${students.email}
     </td>
     <td align="center">
      ${students.phone}
     </td>
     <td align="center">
      ${students.address}
     </td>
     <td align="center">
      <a href="deleteStudent.do?delStuid=${students.id}"
       onclick='return confirm("<bean:message key="confirm.del.student"/>");' target="center"><bean:message
        key="student.delete" />
      </a>
     </td>
    </tr>
   </c:forEach>
   <br />
   <tr>
    <td colspan="7" align="center">
     第${requestScope.currentPage}页 &nbsp;共${requestScope.pageCount}页
     <a href="listStudent.do?pageNo=1">首页</a>&nbsp;
     <logic:greaterThan value="1" name="currentPage" scope="request">
      <a href="listStudent.do?pageNo=${requestScope.currentPage-1}">
     </logic:greaterThan>
     上一页
     <logic:greaterThan value="1" name="currentPage" scope="request">
      </a>
     </logic:greaterThan>

     <logic:lessThan value="${requestScope.pageCount}" name="currentPage"
      scope="request">
      <a href="listStudent.do?pageNo=${requestScope.currentPage+1}">
     </logic:lessThan>
     下一页
     <logic:lessThan value="${requestScope.pageCount}" name="currentPage"
      scope="request">
      </a>
     </logic:lessThan>
     <a href="listStudent.do?pageNo=${requestScope.pageCount}">尾页</a>&nbsp;
    </td>
   </tr>
</table>

分享到:
评论

相关推荐

    HibernateDaoSupport二次封装组件,快速统计和查询,修改

    本文将深入探讨`HibernateDaoSupport`的二次封装,以及如何通过封装来实现快速的统计、查询、修改和删除操作,同时也会涉及SQL语句中的`in`、`or`和`exists`子句的应用。 首先,`HibernateDaoSupport`提供了对`...

    hibernate分页技术.doc

    总结来说,Hibernate分页技术主要涉及以下几个关键点: 1. 使用`HibernateDaoSupport`或`HibernateTemplate`来简化Hibernate操作。 2. 编写自定义的扩展类,如`MyHibernateDaoSupport`,提供通用的分页查询方法。 3....

    hibernate+spring实现分页

    ### 使用Hibernate与Spring实现分页功能 #### 一、引言 在开发Web应用程序时,分页是一项常用的功能。它可以显著提升用户体验,并减轻服务器压力。本文将详细介绍如何结合使用Hibernate和Spring框架来实现数据的...

    spring+struts+hibernate实现分页

    在IT领域,尤其是在Web开发中,使用Spring、Struts和Hibernate框架进行集成是常见的实践,因为它们能够提供高效且灵活的解决...这种分页实现方式具有良好的可扩展性和复用性,是企业级Web应用开发中常见的设计模式。

    ssh分页实现.

    SSH框架下的分页实现不仅需要在DAO层合理设计查询方法,还应充分利用Spring和Hibernate的特性,如`HibernateDaoSupport`和`HibernateCallback`,同时引入专门的`PageBean`类来管理分页状态。这种设计模式不仅提高了...

    高效率spring+struts+hibernate分页算法

    分页是指将大量的数据分成多个页面展示的技术手段。在Web应用中,用户通常只能看到当前页面的数据,而其他未显示的数据则隐藏在后台,通过翻页操作来查看更多的内容。分页可以有效地减轻服务器的压力,提高用户体验...

    ssh2分页代码

    ### SSH2分页实现详解 #### 一、背景与需求分析 在Web开发过程中,分页功能是一项重要的技术,尤其对于展示大量数据的应用而言更是必不可少。传统的分页方式往往是在单个页面中直接处理数据库查询逻辑,这种方式...

    ssh分页笔记

    ### SSH分页功能实现 #### 一、概述 SSH(Struts+Spring+Hibernate)是Java Web开发领域中一种常见的三层架构模式,其中Struts负责表现层,Spring负责业务逻辑层,而Hibernate则用于数据持久化层。在实际项目开发...

    Struts2,hibernate,Spring分页方法

    在实现分页查询的过程中,`HibernateDaoSupport`起到了关键作用。它是Spring提供的一个支持类,使得我们可以在不直接接触`SessionFactory`的情况下,便捷地使用Hibernate的相关功能。`getHibernateTemplate()....

    spring+struts+hibernate分页应用事例

    分页是一种常见的数据展示技术,它允许用户通过翻页的形式查看大量数据,而无需一次性加载所有数据到前端页面上。这不仅能够提高用户体验,还能减轻服务器的压力。在Web应用中,分页通常涉及到后端逻辑处理(如SQL...

    框架分页Dao

    通过合理的分页策略和工具类,我们可以实现高效、可扩展的分页功能,同时确保系统的性能和用户体验。在实际开发中,还需要考虑错误处理、异常捕获以及对不同数据库的兼容性等问题,以确保系统的健壮性和可维护性。

    JPA(hibernate) Dao 和 DaoSupport

    在JPA和Hibernate中,可以使用`Page`或`Slice`接口(Spring Data提供)来实现分页查询,这些接口允许你指定页码和每页大小,返回结果包含当前页的数据以及总页数等信息。 2. **PageIndex.java** - 这个类可能是用于...

    使用配置文件对DAO层封装具有分页功能的S2SH整合实例_好资源0分送

    本文档旨在详细介绍如何使用配置文件的方式完成DAO层的封装,并在此基础上实现分页功能,最终达成S2SH(Struts、Spring、Hibernate)的整合。此文档作为对《使用Annotation并对DAO层封装具有分页功能的S2SH整合实例...

    ssh框架整合分页--内部类回调函数

    SSH框架整合分页——内部类回调函数 SSH(Spring、Struts2...内部类回调函数是实现分页逻辑的关键,而水印技术则是在数据导出时保护知识产权的一个手段。通过深入理解和实践这些知识点,可以提升Java Web开发的技能。

    java之hibernate和spring技术难点及其要点总结

    1. **HibernateDaoSupport与JdbcDaoSupport**:`HibernateDaoSupport`是Spring提供的用于简化Hibernate使用的抽象支持类,它提供了`SessionFactory`等资源的注入,简化了Hibernate的使用过程。而`JdbcDaoSupport`则...

    hibernateDaoSurpport和hibernateTemplate

    在实际使用中,`HibernateDaoSupport`的主要作用是封装了`SessionFactory`到`HibernateTemplate`的转换过程,使DAO层的实现更加简洁。具体来说: - `setSessionFactory`方法用于接收Spring IoC容器的依赖注入,它...

    struts+hibernate+spring

    在`MemberDaoImpl`类中实现了上述接口,利用Spring提供的`HibernateDaoSupport`类来实现Hibernate的操作。 ```java public class MemberDaoImpl extends HibernateDaoSupport implements MemberDao { // 分页查询 ...

    JavaEE8500offer模板包含详细说明和定义

    2. **短信平台二次开发** - 通过httpclient进行客户端编码,实现与短信接口的对接,同时在后台实现了分页查询、统计等功能,以满足特定业务需求。 3. **xxxxxx协同管理平台6.0** - 使用Struts、Spring和Hibernate...

    HibernateS整合pring

    在实际开发中,为了实现分页查询等功能,我们可以扩展`HibernateDaoSupport`类,增加自定义的方法。例如,可以添加`findPageByCriteria(Criteria criteria, int startIndex, int pageSize)`这样的方法,结合...

    SSH整合实例(学生成绩管理系统)

    DAO层接口和实现类负责与数据库交互,实现类继承HibernateDaoSupport,以便使用Hibernate提供的便捷操作。 5. Service层设计:创建Service接口和实现类,实现业务逻辑,通过依赖注入调用DAO层方法。 6. Web层实现...

Global site tag (gtag.js) - Google Analytics