hibernate 组合查询且分页

分页的核心代码

package com.crm.dao;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.MatchMode;

//hibernate 自动创建的一个工厂类
import com.crm.util.HibernateSessionFactory;

public class SplitDAO {


	//获得总共显示的页数,参数:allRows 总行数,pageSize 每页显示的行数
	private int getPages(int allRows, int pageSize) {
		return (allRows + pageSize - 1) / pageSize;
	}

	/*
	 * 获得总页数<br>
	 * parameter<br>
	 * Object obj 类对象<br>
	 * int pageSize 查询几条数据<br>
	 * int currPage 当前是第几页
	 * */
	public SplitBean split(Object obj, int pageSize, int currPage) throws Exception{
		SplitBean sb = new SplitBean();	
		try{
			Session session = HibernateSessionFactory.getSession();			
			Criteria cta = session.createCriteria(obj.getClass());
			// qbe不能用主键查询
			Example ex = Example.create(obj);
			ex.ignoreCase().enableLike(MatchMode.ANYWHERE);
			ex.excludeNone();
			ex.excludeZeroes();
	
			cta.add(ex);
			//获得有多少条数据
			List list = cta.list();		
			//总行数
			int allRows = list.size();
			//数据验证
			pageSize = pageSize<=0?10:pageSize;
			//所有显示的页数
			int pages = getPages(allRows,pageSize);
			//如果输入的当前页大于最大页数
			currPage=currPage > pages?pages:currPage;
			//如果输入的当前页小于等于0
			currPage=currPage<=0?1:currPage;
			
			
			cta.setFirstResult((currPage - 1) * pageSize);//设置起始查询的位置		
			cta.setMaxResults(pageSize);				 //设置一次最多查多少条数据
			
			
			List list2 = cta.list();						//查询出需要的数据
			
			
			//对封装类进行设置数据
			sb.setContent(list2);
			sb.setCurrPage(currPage);
			sb.setPageSize(pageSize);
			sb.setPages(pages);
			sb.setAllRows(allRows);
		}finally{
			HibernateSessionFactory.closeSession();
		}
		return sb;
	}

}


把分页的数据用一个实体对象保存

package com.crm.dao;

//封装分页显示数据类
import java.util.List;

public class SplitBean {

	private int allRows;	//总行数

	private int pageSize;	//显示行数

	private int currPage;	//当前页数
	
	private int pages;		//总页数

	private List content;	//显示数据

	
	
	public int getAllRows() {
		return allRows;
	}

	public void setAllRows(int allRows) {
		this.allRows = allRows;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getCurrPage() {
		return currPage;
	}

	public void setCurrPage(int currPage) {
		this.currPage = currPage;
	}

	public List getContent() {
		return content;
	}

	public void setContent(List content) {
		this.content = content;
	}

	public int getPages() {
		return pages;
	}

	public void setPages(int pages) {
		this.pages = pages;
	}

}



用hibernate 写的一个通用分页程序.
希望大家有更好的例子上传来给小弟学习学习

你可能感兴趣的:(DAO,Hibernate)