应用Hibernate3的DetachedCriteria实现分页查询
java 代码importjava.math. * ;
public classPager {
private inttotalRows;// 总行数
private intpageSize=30 ;// 每页显示的行数
private intcurrentPage;// 当前页号
private inttotalPages;// 总页数
private intstartRow;// 当前页在数据库中的起始行
publicPager() {
}
publicPager( int_totalRows) {
totalRows=_totalRows;
totalPages=totalRows / pageSize;
intmod=totalRows % pageSize;
if (mod > 0 ){
totalPages ++ ;
}
currentPage=1 ;
startRow=0 ;
}
public intgetStartRow() {
returnstartRow;
}
public intgetTotalPages() {
returntotalPages;
}
public intgetCurrentPage() {
returncurrentPage;
}
public intgetPageSize() {
returnpageSize;
}
public voidsetTotalRows( inttotalRows) {
this.totalRows=totalRows;
}
public voidsetStartRow( intstartRow) {
this.startRow=startRow;
}
public voidsetTotalPages( inttotalPages) {
this.totalPages=totalPages;
}
public voidsetCurrentPage( intcurrentPage) {
this.currentPage=currentPage;
}
public voidsetPageSize( intpageSize) {
this.pageSize=pageSize;
}
public intgetTotalRows() {
returntotalRows;
}
public voidfirst() {
currentPage= 1 ;
startRow= 0 ;
}
public voidprevious() {
if(currentPage== 1 ) {
return ;
}
currentPage -- ;
startRow =(currentPage-1)*pageSize;
}
public voidnext() {
if(currentPage<totalPages) {
currentPage ++ ;
}
startRow=(currentPage-1)*pageSize;
}
public void last() {
currentPage=totalPages;
startRow=(currentPage-1 )*pageSize;
}
public void refresh(int_currentPage) {
currentPage=_currentPage;
if(currentPage>totalPages) {
last();
}
}
}
操作pager的PagerService
java 代码
package com.game.common;
public classPagerService {
publicPager getPager(String currentPage,String pagerMethod, inttotalRows) {
// 定义pager对象,用于传到页面
Pager pager= newPager(totalRows);
// 如果当前页号为空,表示为首次查询该页
// 如果不为空,则刷新pager对象,输入当前页号等信息
if(currentPage!=null ) {
pager.refresh(Integer.parseInt(currentPage));
}
// 获取当前执行的方法,首页,前一页,后一页,尾页。
if(pagerMethod!=null ) {
if(pagerMethod.equals("first")) {
pager.first();
} else if(pagerMethod.equals("previous")) {
pager.previous();
} else if(pagerMethod.equals("next")) {
pager.next();
} else if(pagerMethod.equals("last")) {
pager.last();
}
}
returnpager;
}
}
java 代码
public class ProductsDaoImp extends HibernateDaoSupport implements ProductsDao {
public int getRows() {
String sql = " FROM Products ORDER BY gameNameCn " ;
List list = this .getHibernateTemplate().find(sql);
returnlist.size();
}
public void addProduct(Products pd) {
this.getHibernateTemplate().save(pd);
}
public void deleteProduct(Products pd) {
this.getHibernateTemplate().delete(pd);
}
public String getMaxId() {
String sql="select max(gameId)+1 from Products";
StringnoStr=null;
Listlist=(List)this.getHibernateTemplate().find(sql);
Iteratorit=list.iterator();
if(it.hasNext()){
Object noInt=it.next();
if(noInt==null){
noStr="1";
}else{
noStr=noInt.toString();
}
}
if(noStr.length()==1){
noStr="000"+noStr;
}else if(noStr.length()==2){
noStr="00"+noStr;
}else if(noStr.length()==2){
noStr="0"+noStr;
} else {
noStr=noStr;
}
return noStr;
}
public List getProducts() {
String hql="from products order by gameNameCn";
this.getHibernateTemplate().find(hql);
return null;
}
public List getProducts(final int pageSize, final int startRow) {
return this.getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session ) throws HibernateException, SQLException {
Query query=session.createQuery("from products order by gameNameCn");
query.setFirstResult(startRow);
query.setMaxResults(pageSize);
return query.list();
}
});
}
public Products getProducts(int gameId) {
return (Products)this.getHibernateTemplate().get(Products.class, gameId);
}
public int getRows(String fieldName, String value) {
String sql = " FROM Products where" + fieldName + "like '% " + value + " %' " + " ORDER BY gameNameCn " ;
List list = this .getHibernateTemplate().find(sql);
returnlist.size();
}
public List queryProducts(String fieldName, String value) {
String sql = "FROM Products where" + fieldName + "like'%" + value + "%' " + "ORDER BY gameNameCn" ;
return this.getHibernateTemplate().find(sql);
}
public List queryProducts(String fieldName,String value, final int pageSize,
final int startRow) {
finalString sql = " FROM Products where" + fieldName+ "like '% " + value + " %' " + " ORDER BY gameNameCn " ;
return this.getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session ) throws HibernateException, SQLException {
Query query=session.createQuery(sql);
query.setFirstResult(startRow);
query.setMaxResults(pageSize);
return query.list();
}
});
}
public void updateProductd(Products pd) {
this.getHibernateTemplate().update(pd);
}
}
public List findAll()...{
String sql="FROM Author order by author_id";
return getHibernateTemplate().find(sql);
}
public List findAllByPage( final int pageNow, final int pageSize)...{
List list = (List) getHibernateTemplate().execute(
new HibernateCallback() ...{
int size=pageNow*pageSize-pageSize;
public Object doInHibernate(Session session)
throws HibernateException ...{
Query q =session.createQuery("from Author order by author_id");
q.setFirstResult(size);
q.setMaxResults(pageSize);
List cats = q.list();
return cats;
}
});//内部类,返回一个List
return list;
}
然后就是在action里面定义
public int pageNow = 1 ; //初始化为1,默认从第一页开始显示
public int pageSize =3 ; //每页显示5条记录 并生成get,set方法
public int getPageNow() ...{
return pageNow;
}
public void setPageNow(int pageNow) ...{
this.pageNow = pageNow;
}
public int getPageSize() ...{
return pageSize;
}
public void setPageSize(int pageSize) ...{
this.pageSize = pageSize;
} 最后就是前台jsp的调用
<s:url id="url_pre" value="List.action">
<s:param name="pageNow" value="pageNow-1"></s:param>
</s:url>
<s:url id="url_next" value="List.action">
<s:param name="pageNow" value="pageNow+1"></s:param>
</s:url>
<s:form action="List" theme="simple">
转到第<s:textfield name="pageNow"></s:textfield>页
<span><s:submit value=''GO'' name=''cndok''/></span>
</s:form>
<s:a href="%{url_pre}">上一页</s:a>
<s:a href="%{url_next}">下一页</s:a>
页:
[1]