使用扩展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 { 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 List int getStudentCount(); List } 3.定义实现类 主要写出两个分页中要用到的方法 public List if(pageNo<1){ return null; } int offset=(pageNo-1)*pageSize; return findByPage("from Student", offset, pageSize); } public int getStudentCount() { List 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 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 void deleteExamtype(int typeid) throws Exception; int addExamtype(String textName,String testTime)throws Exception; List 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 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 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(""))