前一篇帖子我采用QBC和QBE实现动态分页查询,本贴用Hibernate的Query接口实现动态分页查询。
通用DAO代码如下:
package com.aostarit.erp.dao;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class ExpertManagerDao extends HibernateDaoSupport
{
/**
* @function 查询所有记录数
* @param hql
* hql查询语句
* @return 返回记录数的集合
*/
public List getAllInfo(String hql)
{
List list = this.getHibernateTemplate().find(hql);
return list;
}
/**
* @function 查询单个记录数
* @param hql
* hql查询语句
* @return 将记录封装成Object
*/
public Object getBeanInfo(String hql)
{
Query query = this.getSession().createQuery(hql);
List list = query.list();
return list.get(0);
}
/**
* @function 根据查询条件查询记录数的个数
* @param hql
* hql查询语句
* @return 数据库中满足查询条件的数据的条数
*/
public int getTotalCount(String hql)
{
List result = this.getHibernateTemplate().find(hql);
Integer i = (Integer) result.get(0);
return i;
}
/**
* @function 根据查询条件查询记录数的个数
* @param hql
* hql查询语句
* @param map
* 用map封装查询条件
* @return 数据库中满足查询条件的数据的条数
*/
public int getTotalCount(String hql, Map map)
{
try
{
Query query = this.getSession().createQuery(hql);
if (map != null)
{
Iterator it = map.keySet().iterator();
while (it.hasNext())
{
Object key = it.next();
query.setParameter(key.toString(), map.get(key));
}
}
Integer i = (Integer) query.list().get(0);
return i;
} catch (RuntimeException re)
{
throw re;
}
}
/**
* @function 分页显示符合所有的记录数,将查询结果封装为Pager
* @param pageNo
* 当前页数
* @param pageSize
* 每页显示的条数
* @return 查询结果Pager
*/
public List findPageAll(int pageNo, int pageSize, String hql)
{
try
{
Query query = this.getSession().createQuery(hql);
query.setFirstResult((pageNo - 1) * pageSize);
query.setMaxResults(pageSize);
List result = query.list();
return result;
} catch (RuntimeException re)
{
throw re;
}
}
/**
* @function 分页显示符合所有的记录数,将查询结果封装为Pager
* @param pageNo
* 当前页数
* @param pageSize
* 每页显示的条数
* @param instance
* 将查询条件封装为专家Bean
* @return 查询结果Pager
*/
public List findPageByQuery(int pageNo, int pageSize, String hql,
Map map)
{
List result = null;
try
{
Query query = this.getSession().createQuery(hql);
Iterator it = map.keySet().iterator();
while (it.hasNext())
{
Object key = it.next();
query.setParameter(key.toString(), map.get(key));
}
query.setFirstResult((pageNo - 1) * pageSize);
query.setMaxResults(pageSize);
result = query.list();
} catch (RuntimeException re)
{
throw re;
}
return result;
}
}
BO层代码如下:
package com.aostarit.erp.bo;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.aostarit.erp.dao.ExpertManagerDao;
import com.aostarit.erp.po.EicExpert;
import com.aostarit.erp.util.Pager;
public class ExpertBo
{
/**
* 依靠Spring的依赖注入,注入专家的Dao
*/
private ExpertManagerDao expertManagerDao;
public ExpertManagerDao getExpertManagerDao()
{
return expertManagerDao;
}
public void setExpertManagerDao(ExpertManagerDao expertManagerDao)
{
this.expertManagerDao = expertManagerDao;
}
/**
* @function 根据传递过来的列名,在数据库中查询该列不重复的记录
* @param column
* 传递过来的列名
* @return 该列不重复的记录
*/
public List getColumn(String column)
{
StringBuffer hql = new StringBuffer();
hql.append("select distinct(").append(column).append(
") from EicExpert where ").append(column)
.append(" is not null");
return expertManagerDao.getAllInfo(hql.toString());
}
/**
* @function 根据传递过来的分页的参数,分页查找数据库中的记录,前台用下拉列表显示
* @param pageNo
* 当前的页码
* @param pageSize
* 每页显示的记录数
* @return 符合条件的记录数
*/
public Pager getAllInfo(int pageNo, int pageSize)
{
StringBuffer hql = new StringBuffer();
hql.append("from EicExpert ");
List result = expertManagerDao.findPageAll(pageNo, pageSize, hql
.toString());
int rowCount = expertManagerDao
.getTotalCount("select count(expertid) from EicExpert ");
Pager pager = new Pager(pageSize, pageNo, rowCount, result);
return pager;
}
/**
* @function 将传递过来的参数封装成专家Bean,分页查询符合条件的记录
* @param pageNo
* 当前的页码
* @param pageSize
* 每页显示的记录数
* @param expertName
* 专家的名称
* @param expertSpecialty
* 专家的专业类别
* @param post
* 专家的行政职位
* @return 将符合条件的记录数以及页码信息封装成PagerBean返回
*/
public Pager getInfoByQuery(int pageNo, int pageSize, String expertName,
String expertSpecialty, String post)
{
StringBuffer hql = new StringBuffer();
hql.append("select count(expertid) from EicExpert where 1=1 ");
Map map = new HashMap();
if (expertName != null && expertName.length() > 0)
{
map.put("expertname", "%" + expertName + "%");
hql.append("and expertname like :expertname ");
}
if (expertSpecialty != null && expertSpecialty.length() > 0)
{
map.put("expertspecialty", expertSpecialty);
hql.append("and expertspecialty like :expertspecialty ");
}
if (post != null && post.length() > 0)
{
map.put("post", post);
hql.append("and post like :post ");
}
String queryHql = hql.substring(22);
List result = expertManagerDao.findPageByQuery(pageNo, pageSize,
queryHql, map);
int rowCount = expertManagerDao.getTotalCount(hql.toString(), map);
Pager pager = new Pager(pageSize, pageNo, rowCount, result);
return pager;
}
/**
* @function 根据所属单位的Id,分页查询相关信息
* @param pageNo
* 当前页码
* @param pageSize
* 每页显示的记录数
* @param deptId
* 所属单位的Id
* @return 将符合条件的记录数以及页码信息封装成PagerBean返回
*/
public Pager getInfoByDept(int pageNo, int pageSize, String deptId)
{
if (deptId != null && deptId.length() > 0)
{
StringBuffer hql = new StringBuffer();
hql
.append("select count(expertid) from EicExpert e where e.aorganization.orgCode = :orgCode ");
Map map = new HashMap();
map.put("orgCode", deptId);
List result = expertManagerDao.findPageByQuery(pageNo, pageSize,
hql.substring(22).toString(), map);
int rowCount = expertManagerDao.getTotalCount(hql.toString(), map);
Pager pager = new Pager(pageSize, pageNo, rowCount, result);
return pager;
} else
{
return null;
}
}
/**
* @function 根据专家的主键Id,查询专家的详细信息
* @param expertId
* 专家的主键
* @return 将查询结果封装成专家Bean返回
*/
public EicExpert getBeanInfo(String expertId)
{
StringBuffer hql = new StringBuffer();
hql.append("from EicExpert where expertid = ").append(expertId);
return (EicExpert) expertManagerDao.getBeanInfo(hql.toString());
}
}
分享到:
相关推荐
java ssh通用DAO另类实现示例 java ssh通用DAO另类实现示例
ssh通用泛型DAO 共包含3个类:BaseHibernateDAO,Page,QueryParameter
基本上可以在SSH中通用的dao组件 sd fs fs df sd
基于注解ssh的通用dao的crud,spring4+struts2+hibernate4
再次打造SSH1整合下的通用泛型DAO+分页,基于HibernateTemplate,欢迎大家指正 - DAO - Java - JavaEye论坛_files
通用SSH2结构的增删查改标准代码, bean,HBM文件为自定义, service,dao接口为标准可重用 ...action 调用通用service,service调用通用dao 调用关系用spring 配址文件设置 因为上传限制问题,把lib目录下的jar文件都删掉了
一个通用的基于泛型的dao层,可以减少程序的工作量,方法齐全
这个是不同类型的表单通用的dao模式,简洁明了,注释清楚,可移植性很强
NULL 博文链接:https://ap0406708.iteye.com/blog/537709
struts2 spring hibernate maven 实现 商品管理,实现增加、删除、修改、查询 通用dao实现
该模板是SSH框架的整合,是为了方便开发人员所搭建的架构,里面有自定义标签分页,还有许多通用方法。具体的代码大家下来看看,就不多说了
使用ssh搭建框架+jpa+注解的使用 和通用Dao的使用集成SSH框架
全自动生成Struts2 Hibernate3.6 Spring2.5 自动生成DAO,Service,Action,以及配置文件; 运行CreateSrc.java文件, 修改main()中的方法, 自定义要生成对象的名称; 运行后,请刷新工程可看到生成的文件
标准的SSH项目~dao类经过了整合,继承了通用接口~并且实现了事务的配置,连接的是MYSQL数据库,程序拉下来直接能跑,首先你要有MYSQL数据库~
一、背景.........................................2 二、问题..........................................2 三、改变的动力...................................3 四、解决方案............................
教学-传智播客-项目视频经典之作巴巴运动网106集-28将Web层分页封装成通用模块源代码 所需要的jar文件: (一)、Hibernate: 位于 "\hibernate-distribution-3.3.2.GA" 目录下的jar文件: hibernate3.jar 位于 "\...
否则只能查看 11) Dao 操作优化 BaseDao.java 所有dao的通用方法,dao都必须继承此类 (反射泛型)实现步骤代码:1) 设计数据库:
该demo集成了spring+springmvc+hibernate框架,里面的dao、service、entity均采用注解形式,容易开发,另外该demo中dao采用注解形式,将所有实体dao需要用到的通用方法如insert,update,delete,分页查询等均采用...
当前需要分支 dao、mongrel2 和 swagger-def - 'genericIO' 此外,需要一个 'dbkeys' 存储桶,形式为 'dbname={"key":""}' 安装模块: npm install git+ssh://git@github.com:OPENi-ict/crud_api.git 您将需要通过 ...
在上次的 ssh 事务配置上修改了,可以做到配置通用性,只需要在配置中把要添加事务处理的 DAO 或 Mgr添加 <br>有什么问题可以给我留言:lovealo@163.com<br>