hibernate分页工具类

hibernate分页工具类,附带具体的分页方法


调用效果:

//查询说说  
PageBean page= null;  
page = new QueryHelper(Talk.class, "t")  
        .addCondition("t.user.id=?",visitUser.getId())  
        .addCondition("t.status=?", Talk.INT_VALUE_0)  
        .addCondition(isUser == VISITUSER_ROLE_2, "t.visibleRange in (?,?)",Talk.INT_VALUE_2,Talk.INT_VALUE_3)  
        .addCondition(isUser == VISITUSER_ROLE_3, "t.visibleRange in (?)",Talk.INT_VALUE_3)  
        .addCondition(timestamp!=0,"t.posttime<?",timestamp)  
        .addOrderProperty("t.posttime",false)  
        .preparePageBean(talkService, pageNum, pageSize);


1,分页工具类(QueryHelper.java)

package com.hl.zoneSystem_v01.utils;  
  
import java.util.ArrayList;  
import java.util.List;  
  
import com.hl.zoneSystem_v01.domain.PageBean;  
import com.hl.zoneSystem_v01.service.BaseService;  
  
/** 
 * 用于辅助拼接HQL语句 
 *  
 * @author hl 
 *  
 */  
public class QueryHelper {  
  
      
    //private String fromClause; // FROM子句  
    //private String whereClause  = ""; // Where子句  
    //private String orderByClause  = ""; // OrderBy子句  
    private StringBuffer fromClause = new StringBuffer(); // FROM子句  
    private StringBuffer whereClause  = new StringBuffer(); // Where子句  
    private StringBuffer orderByClause  = new StringBuffer(); // OrderBy子句  
      
      
  
    private List<Object> parameters = new ArrayList<Object>(); // 参数列表  
  
    /** 
     * 生成From子句 
     * @param <T> 
     *  
     * @param clazz 
     * @param alias 
     *            别名 
     */  
    public <T> QueryHelper(Class<T>clazz, String alias) {  
        //fromClause = "FROM " + clazz.getSimpleName() + " " + alias;  
        fromClause.append("FROM ").append(clazz.getSimpleName()).append(" ").append(alias);  
          
    }  
  
    /** 
     * 拼接Where子句 
     *  
     * @param condition 
     * @param params 
     */  
    public QueryHelper addCondition(String condition, Object... params) {  
        // 拼接  
        if (whereClause.length() == 0) {  
            //whereClause = " WHERE " + condition;  
            whereClause.append(" WHERE ").append(condition);  
        } else {  
            //whereClause += " AND " + condition;  
            whereClause.append(" AND ").append(condition);  
        }  
  
        // 参数  
        if (params != null) {  
            for (Object p : params) {  
                parameters.add(p);  
            }  
        }  
  
        return this;  
    }  
  
    /** 
     * 如果第一个参数为true,则拼接Where子句 
     *  
     * @param append 
     * @param condition 
     * @param params 
     */  
    public QueryHelper addCondition(boolean append, String condition, Object... params) {  
        if (append) {  
            addCondition(condition, params);  
        }  
        return this;  
    }  
      
      
    /** 
     * 拼接where子句   已or的形式 
     */  
    public QueryHelper addOrCondition(String condition, Object... params) {  
        // 拼接  
        if (whereClause.length() == 0) {  
            //whereClause = " WHERE " + condition;  
            whereClause.append(" WHERE ").append(condition);  
        } else {  
            //whereClause += " OR " + condition;  
            whereClause.append(" OR ").append(condition);  
        }  
  
        // 参数  
        if (params != null) {  
            for (Object p : params) {  
                parameters.add(p);  
            }  
        }  
  
        return this;  
    }  
  
    /** 
     * 如果第一个参数为true,则拼接Where子句   or形式  
     *  
     * @param append 
     * @param condition 
     * @param params 
     */  
    public QueryHelper addOrCondition(boolean append, String condition, Object... params) {  
        if (append) {  
            addOrCondition(condition, params);  
        }  
        return this;  
    }  
      
      
      
      
      
  
    /** 
     * 拼接OrderBy子句 
     *  
     * @param propertyName 
     *            参与排序的属性名 
     * @param asc 
     *            true表示升序,false表示降序 
     */  
    public QueryHelper addOrderProperty(String propertyName, boolean asc) {  
        if (orderByClause.length() == 0) {  
            //orderByClause = " ORDER BY " + propertyName + (asc ? " ASC" : " DESC");  
            orderByClause.append(" ORDER BY ").append(propertyName).append((asc ? " ASC" : " DESC"));  
        } else {  
            //orderByClause += ", " + propertyName + (asc ? " ASC" : " DESC");  
            orderByClause.append(", ").append(propertyName).append((asc ? " ASC" : " DESC"));  
        }  
        return this;  
    }  
  
    /** 
     * 如果第一个参数为true,则拼接OrderBy子句 
     *  
     * @param append 
     * @param propertyName 
     * @param asc 
     */  
    public QueryHelper addOrderProperty(boolean append, String propertyName, boolean asc) {  
        if (append) {  
            addOrderProperty(propertyName, asc);  
        }  
        return this;  
    }  
  
    /** 
     * 获取生成的用于查询数据列表的HQL语句 
     *  
     * @return 
     */  
    public String getListQueryHql() {  
        return fromClause.toString() + whereClause.toString() + orderByClause.toString();  
    }  
  
    /** 
     * 获取生成的用于查询总记录数的HQL语句 
     *  
     * @return 
     */  
    public String getCountQueryHql() {  
        StringBuffer sCount = new StringBuffer();  
        sCount.append("SELECT COUNT(*) ").append(fromClause.toString()).append(whereClause.toString());  
        //return "SELECT COUNT(*) " + fromClause + whereClause;  
        return sCount.toString();  
    }  
  
    /** 
     * 获取HQL中的参数值列表 
     *  
     * @return 
     */  
    public List<Object> getParameters() {  
        return parameters;  
    }  
  
    /** 
     * 查询分页信息,并放到值栈栈顶 
     *  
     * @param service 
     * @param pageNum 
     * @param pageSize 
     */  
    public PageBean preparePageBean(BaseService<?> service, int pageNum, int pageSize) {  
        PageBean pageBean = service.getPageBean(pageNum, pageSize, this);  
        //ActionContext.getContext().getValueStack().push(pageBean);  
        return pageBean;  
    }  
      
    /** 
     * 根据hql信息,查询列表信息 
     *  
     * @param service 
     * @param pageNum 
     * @param pageSize 
     */  
    public List prepareList(BaseService<?> service, int pageNum, int pageSize) {  
        List list = service.getEntity(pageNum, pageSize, this);  
        return list;  
    }  

    /** 
     * 根据hql信息的复合条件,查询单个的对象 
     *  
     *  
     */  
    public <T>T prepareObject(BaseService<T> service) {  
        return service.getEntity(this.getListQueryHql(), this.getParameters());  
    }


2,分页依赖的类、方法(PageBean.java  + BaseService.java)
BaseService.java中方法getPageBean()

----------------------------------------
注:这里的getSession()方法为获取当前可用session  ------>   sessionFactory.getCurrentSession();

/** 
 * @ClassName: BaseServiceImpl 
 * @Description: 抽象的service实现,专门用于继承  
 * @project: zoneSystem_v01
 * @package: com.hl.zoneSystem_v01.service.impl
 * @author: hl
 * @version: V1.0
 * @since: JDK 1.6.0_21
 * @date: 2014-3-31 下午7:59:59 
 * @param <T> 
 */ 
public abstract class BaseServiceImpl<T> implements BaseService<T> {
    
    /** (not Javadoc) 
     * @Title: getPageBean 
     * @Description: 公共的查询分页信息的方法 
     * @param pageNum 
     * @param pageSize 
     * @param queryHelper 
     * @return 
     * @see com.hl.zoneSystem_v01.dao.BaseDao#getPageBean(int, int, com.hl.zoneSystem_v01.utils.QueryHelper) 
     */   
    @Override  
    public PageBean getPageBean(int pageNum, int pageSize,QueryHelper queryHelper) {  
        //logger.debug("BaseDaoImpl.getPageBean( int pageNum, int pageSize, QueryHelper queryHelper )");  
        // 参数列表  
        List<Object> parameters = queryHelper.getParameters();  
  
        //logger.debug("queryHelper.getListQueryHql()----->"+queryHelper.getListQueryHql());  
        // 查询本页的数据列表    这里的getSession()为获取当前可用的session------>sessionFactory.getCurrentSession();  
        Query listQuery = getSession().createQuery(queryHelper.getListQueryHql()); // 创建查询对象  
        if (parameters != null) { // 设置参数  
            for (int i = 0; i < parameters.size(); i++) {  
                listQuery.setParameter(i, parameters.get(i));  
            }  
        }  
        listQuery.setFirstResult((pageNum - 1) * pageSize);  
        listQuery.setMaxResults(pageSize);  
        List list = listQuery.list(); // 执行查询  
  
        // 查询总记录数量  
        Query countQuery = getSession().createQuery(queryHelper.getCountQueryHql());  
        if (parameters != null) { // 设置参数  
            for (int i = 0; i < parameters.size(); i++) {  
                countQuery.setParameter(i, parameters.get(i));  
            }  
        }  
        Long count = (Long) countQuery.uniqueResult(); // 执行查询  
  
        return new PageBean(pageNum, pageSize, count.intValue(), list);  
    }

}


PageBean.java
-------------------------

/** 
 * 分页功能中的一页的信息 
 *  
 * @author hl 
 *  
 */  
public class PageBean {  
  
    // 指定的或是页面参数  
    private int currentPage; // 当前页  
    private int pageSize; // 每页显示多少条  
  
    // 查询数据库  
    private int recordCount; // 总记录数  
    private List recordList; // 本页的数据列表  
  
    // 计算  
    private int pageCount; // 总页数  
    private int beginPageIndex; // 页码列表的开始索引(包含)  
    private int endPageIndex; // 页码列表的结束索引(包含)  
  
    /** 
     * 只接受前4个必要的属性,会自动的计算出其他3个属生的值 
     *  
     * @param currentPage 
     * @param pageSize 
     * @param recordCount 
     * @param recordList 
     */  
    public PageBean(int currentPage, int pageSize, int recordCount, List recordList) {  
        this.currentPage = currentPage;  
        this.pageSize = pageSize;  
        this.recordCount = recordCount;  
        this.recordList = recordList;  
  
        // 计算总页码  
        pageCount = (recordCount + pageSize - 1) / pageSize;  
  
        // 计算 beginPageIndex 和 endPageIndex  
        // >> 总页数不多于10页,则全部显示  
        if (pageCount <= 10) {  
            beginPageIndex = 1;  
            endPageIndex = pageCount;  
        }  
        // >> 总页数多于10页,则显示当前页附近的共10个页码  
        else {  
            // 当前页附近的共10个页码(前4个 + 当前页 + 后5个)  
            beginPageIndex = currentPage - 4;  
            endPageIndex = currentPage + 5;  
            // 当前面的页码不足4个时,则显示前10个页码  
            if (beginPageIndex < 1) {  
                beginPageIndex = 1;  
                endPageIndex = 10;  
            }  
            // 当后面的页码不足5个时,则显示后10个页码  
            if (endPageIndex > pageCount) {  
                endPageIndex = pageCount;  
                beginPageIndex = pageCount - 10 + 1;  
            }  
        }  
    }  
  
    public List getRecordList() {  
        return recordList;  
    }  
  
    public void setRecordList(List recordList) {  
        this.recordList = recordList;  
    }  
  
    public int getCurrentPage() {  
        return currentPage;  
    }  
  
    public void setCurrentPage(int currentPage) {  
        this.currentPage = currentPage;  
    }  
  
    public int getPageCount() {  
        return pageCount;  
    }  
  
    public void setPageCount(int pageCount) {  
        this.pageCount = pageCount;  
    }  
  
    public int getPageSize() {  
        return pageSize;  
    }  
  
    public void setPageSize(int pageSize) {  
        this.pageSize = pageSize;  
    }  
  
    public int getRecordCount() {  
        return recordCount;  
    }  
  
    public void setRecordCount(int recordCount) {  
        this.recordCount = recordCount;  
    }  
  
    public int getBeginPageIndex() {  
        return beginPageIndex;  
    }  
  
    public void setBeginPageIndex(int beginPageIndex) {  
        this.beginPageIndex = beginPageIndex;  
    }  
  
    public int getEndPageIndex() {  
        return endPageIndex;  
    }  
  
    public void setEndPageIndex(int endPageIndex) {  
        this.endPageIndex = endPageIndex;  
    }  
  
}  


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值