应用Hibernate3的DetachedCriteria实现分页查询

java 代码
import java.math. * ;

public class Pager {
private int totalRows; // 总行数
private int pageSize=30 ; // 每页显示的行数
private int currentPage; // 当前页号
private int totalPages; // 总页数
private int startRow; // 当前页在数据库中的起始行

public Pager() {

}

public Pager( int _totalRows) {
totalRows=_totalRows;
totalPages=totalRows / pageSize;
int mod=totalRows % pageSize;
if (mod > 0 ) {
totalPages ++ ;
}
currentPage=1 ;
startRow=0 ;
}

public int getStartRow() {
return startRow;
}
public int getTotalPages() {
return totalPages;
}
public int getCurrentPage() {
return currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setTotalRows( int totalRows) {
this.totalRows = totalRows;
}
public void setStartRow( int startRow) {
this.startRow = startRow;
}
public void setTotalPages( int totalPages) {
this.totalPages = totalPages;
}
public void setCurrentPage( int currentPage) {
this.currentPage = currentPage;
}
public void setPageSize( int pageSize) {
this.pageSize = pageSize;
}
public int getTotalRows() {
return totalRows;
}
public void first() {
currentPage = 1 ;
startRow = 0 ;
}
public void previous() {
if (currentPage == 1 ) {
return ;
}
currentPage -- ;
startRow =(currentPage-1)*pageSize;
}
public void next() {
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 class PagerService {



public Pager getPager(String currentPage,String pagerMethod, int totalRows) {
// 定义pager对象,用于传到页面
Pager pager= new Pager(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();
}
}
return pager;
}
}


java 代码
public class ProductsDaoImp extends HibernateDaoSupport implements ProductsDao {

public int getRows() {

String sql = " FROM Products ORDER BY gameNameCn " ;
List list = this .getHibernateTemplate().find(sql);
return list.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";
String noStr=null;
List list=(List)this.getHibernateTemplate().find(sql);
Iterator it=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);
return list.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) {
final String 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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值