Hibernate+Struts+Spring 实现的通用分页查询
1:分页查询的实体(PageModel.java)
代码:
package com.ps.model;
import java.util.List;
public class PageModel<T> {
private int currentPage;//当前页
private int sumcount;//总的记录条数
private int sumpage;//总的页数
private int current_count;//每页记录条数
private List<T> list;//数据集
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getSumcount() {
return sumcount;
}
public void setSumcount(int sumcount) {
//计算总的页数
int s = (int)Math.ceil(sumcount/(float)current_count);
if(s==0) s=1;
this.sumpage = s;
this.sumcount = sumcount;
}
public int getSumpage() {
return sumpage;
}
public int getCurrent_count() {
return current_count;
}
public void setCurrent_count(int currentCount) {
current_count = currentCount;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
}
2:创建分页接口(IpageModelDao.java):
代码:
package com.fund.dao;
import com.fund.model.PageModel;
public interface IPageModelDao {
/**
* 分页查询
* @param hql 查询的hql语句
* @param currentPage 当前页
* @param Current_count 每页显示记录条数
* @return
*/
public PageModel queryPage(final String hql,final int currentPage,final int Current_count);
}
3:创建分页的dao(PageModelDaoImpl.java)实现接口IpageModelDao的方法
代码:
package com.ps.dao.impl;
import java.sql.SQLException;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.ps.dao.IPageModelDao;
import com.ps.model.PageModel;
public class PageModelDaoImpl extends HibernateDaoSupport implements IPageModelDao {
/**
*
* 分页查询的方法
* @param currentPage 当前页
* @param Current_count 每页显示条数
* @param hql hql查询语句
* @return
*/
public PageModel queryPage(final String hql,final int currentPage,final int Current_count){
PageModel pm = new PageModel();//创建分页对象
pm.setCurrentPage(currentPage);//设置当前页
pm.setCurrent_count(Current_count);//设置每页显示条数
//设置总的记录条数
pm.setSumcount(super.getHibernateTemplate().find(hql).size());
//通过hql语句获取数据
List list = super.getHibernateTemplate().executeFind(new HibernateCallback() {
public List doInHibernate(Session session)
throws HibernateException, SQLException {
return session.createQuery(hql) .setFirstResult((currentPage-1)*Current_count)
.setMaxResults(Current_count).list();
}
});
pm.setList(list);//设置数据
return pm;
}
}
4.在applicationContext.xml添加分页的配置
<!--配置分页的dao -->
<bean id="PageModelDao" class="com.ps.dao.impl.PageModelDaoImpl">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
5.在util包创建BeanFactoryUtil.java类中写静态方法getInterface(),实现获取Bean对象(为了方便获取Bean而封装的方法)
代码:
package com.ps.util;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class BeanFactoryUtil {
/**
* 获取bean
* @param idaoName Bean的id
* @return Object
*/
public static Object getInterface(String idaoName){
return new ClassPathXmlApplicationContext("applicationContext.xml").getBean(idaoName);
}
}
/****************************************************************/
封装的分页方法的使用:
例如:
public PageModel<NewsInfo> queryALL(final int currentPage,final int newsTypeId,final int Current_count) {
IPageModelDao idao = (IPageModelDao) BeanFactoryUtil.getInterface("PageModelDao");
return idao.queryPage("from NewsInfo", currentPage, Current_count);
}