当前位置:文档之家› hibernate分页技术

hibernate分页技术

使用扩展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 findAll();

List findAllByPage(int pageNo,int pageSize);

int getStudentCount();

List findStudentByNameAndNumber(String stuName,String stuNumber);

}

3.定义实现类

主要写出两个分页中要用到的方法

public List 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 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 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 listQuestion(int pageNo) throws Exception;

void deleteExamtype(int typeid) throws Exception;

int addExamtype(String textName,String testTime)throws Exception;

List 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 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 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(""))

相关主题