package com.bjsxt.oa.manager.impl;
import java.util.List;
import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.bjsxt.oa.PageModel;
import com.bjsxt.oa.SystemContext;
import com.bjsxt.oa.manager.SystemException;
/**
* 抽象的公共分页类
* @author lilongsheng
*
*/
public class AbstractManager extends HibernateDaoSupport {
/**
* 带hql查询语句的查询方法
* @param hql
* @return
*/
public PageModel searchPaginated(String hql){
return searchPaginated(hql,null,SystemContext.getOffset(),SystemContext.getPagesize());
}
/**
* 带hql查询语句和一个参数的方法
* @param hql
* @param param
* @return
*/
public PageModel searchPaginated(String hql,Object param){
return searchPaginated(hql,new Object[]{param},SystemContext.getOffset(),SystemContext.getPagesize());
}
/**
* 带hql查询语句和若干参数的方法
* @param hql
* @param params
* @return
*/
public PageModel searchPaginated(String hql,Object[] params){
return searchPaginated(hql,params,SystemContext.getOffset(),SystemContext.getPagesize());
}
/**
* 不带参数的查询语句
* @param hql
* @param offset
* @param pagesize
* @return
*/
public PageModel searchPaginated(String hql,int offset,int pagesize){
return searchPaginated(hql,null, offset, pagesize);
}
/**
*
* 带一个参数的分页查询
*/
public PageModel searchPaginated(String hql,Object obj,int offset,int pagesize){
return searchPaginated(hql, new Object[]{obj}, offset, pagesize);
}
/**
* 根据HQL语句进行分页查询
* @param hql HQL语句
* @param params HQL语句带的多个参数值
* @param offset 从第几条记录开始查询
* @param pagesize 每页显示多少行
* @return
*/
public PageModel searchPaginated(String hql,Object[] params,int offset,int pagesize){
//获取记录总数
String countHql=getCountQuery(hql);
Query query=getSession().createQuery(countHql);
if (params!=null && params.length>0) {
for(int i=0;i<params.length;i++){
query.setParameter(i, params[i]);
}
}
int total=((Long)query.uniqueResult()).intValue();
//获得记录结果集
query = getSession().createQuery(hql);
if(params != null && params.length > 0){
for(int i=0; i<params.length; i++){
query.setParameter(i, params[i]);
}
}
List datas=query.setFirstResult(offset)
.setMaxResults(pagesize)
.list();
PageModel pm=new PageModel();
pm.setTotal(total);
pm.setDatas(datas);
return pm;
}
/**
* 根据HQL语句,获得查找总记录数的HQL语句
* 如:
* select ... from Orgnization o where o.parent is null
* 经过转换,可以得到:
* select count(*) from Orgnization o where o.parent is null
* @param hql
* @return
*/
private String getCountQuery(String hql){
int index=hql.indexOf("from");
if (index!=-1) {
return "select count(*) "+ hql.substring(index);
}
throw new SystemException("无效的HQL查询语句!");
}
}
相关推荐
使用pager-taglib分页,含有多种分页样式,jar包都有,只要导入就可以运行,内附有说明,java 语言的
pager-taglib 是个很好的jsp分页标签,使用它结合jstl可以实现灵活的分页导航功能。在实际的开发中post方式的提交比较常见,本人做了一个比较通用的基于post方式的一个应用。主要实现一下功能: 1.添加输入跳转、每...
jsp 分页标签。 用于列表自动分页功能
用于在jsp中进行分页的 pager-taglib包
pager-taglib分页组建 pager-taglib分页组建 pager-taglib分页组建 pager-taglib分页组建
这是关于paper-taglib分页框架的小小项目,导入myeclipse中部署到服务器可直接运行,包含了两种分页风格:普通样式和谷歌样式,可以在servlet中通过注释切换。
这是pager-taglib的官方源码,但在采用官方的pager-taglib分页传输中文参数会出现乱码,所以我采用maven新建一个pager-taglib项目对pager-taglib的源码进行小小的改动,是他支持中文传输,更重要的是把源代码提供给...
该资源系本人工作之余的一个小小案例,希望对大家有所帮助
displaytag,pager-taglib 分页包 和源文件
pager-taglib-2.0,pager-taglib-2.0,pager-taglib-2.0,java分页标签。
pager-taglib-2.0及使用方法,一个很好用的页面分页工具.
jsp pager-taglib分页资料jsp pager taglib 分页 ppt,很好的分页模版
pager-taglib分页要点,第三方分页工具 的要点!
利用pager-taglib进行查询分页时需要添加该jar包:pager-taglib.jar
很详细的Pager-taglib标签库分页的使用。
pager-taglib 是个很好的jsp分页标签,使用它结合jstl可以实现灵活的分页导航功能。在实际的开发中post方式的提交比较常见,本人做了一个比较通用的基于post方式的一个应用。主要实现一下功能: 1.添加输入跳转、每...
用pager-taglib进行分页时,如果出现中文参数,由于pager-taglib默认是用ISO8859-1编码后进行参数传递,故会出现乱码现象。本人下载源码后,将编码的语句注释掉,即不进行编码,解决了中文乱码问题。改写后的代码已...
pager-taglib.jar包下载.很方便的分页框架。这是jar包,希望能帮到大家
pager-taglib使用指南 .txt 很详细,里面还有例子。