前一篇帖子我采用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());
}
}
分享到:
相关推荐
在这个主题中,我们将深入探讨"ssh通用泛型DAO"的相关知识点。 首先,我们来了解"BaseHibernateDAO"。BaseHibernateDAO是基于Hibernate框架的一个基类,它封装了常见的数据库操作,如增删查改(CRUD)。通过继承这...
总结:这个另类的Java SSH通用DAO实现利用了动态代理和Hibernate的特性,降低了代码复杂度,提高了代码复用性。它使得DAO层的维护变得更加简单,同时保持了良好的封装性和扩展性。在实际项目中,这样的设计可以显著...
在这个场景中,"SSH中通用DAO类"指的是在SSH框架下设计和实现的可以应用于多种业务场景的数据访问对象(Data Access Object)类。 DAO层是三层架构或MVC架构中的一个重要部分,主要负责与数据库进行交互,将业务...
总结起来,基于注解的SSH通用DAO的CRUD实现主要涉及以下步骤: 1. 使用Spring注解定义bean、组件扫描和依赖注入。 2. 在Struts2 Action中定义CRUD操作并使用注解配置请求路径和结果页面。 3. 利用Hibernate注解定义...
在IT行业中,SSH2(Secure Shell 2)通常指的是用于远程访问和安全通信的协议,而DAO(Data Access Object)模式则是一种常见的软件设计模式,主要用于数据库操作的抽象。这篇博客"ssh2 + dao泛型"结合了这两个概念...
标题“ssh通用基于泛型的dao”指的是使用SSH(Spring、Struts2、Hibernate)框架开发的一个通用的、基于泛型的DAO实现,它旨在提高开发效率,减少重复工作。 SSH框架是Java企业级应用开发的常用组合,Spring提供了...
在这个特定的讨论中,我们聚焦于SSH1中的一个关键概念:通用泛型DAO(Data Access Object)以及分页功能的实现。DAO层是模型层和数据访问层之间的桥梁,它的主要职责是处理数据库操作,为业务层提供无状态的数据访问...
SSH通用配置的核心在于理解这三个框架如何协作,以及如何在XML配置文件中定义和连接它们的各个组件。通过这样的配置,开发者可以快速搭建一个支持基本CRUD操作和分页查询的应用。实际开发中,还可以考虑引入MyBatis...
综上所述,SSH通用分页插件是Java Web开发中的一个重要工具,它简化了数据分页的实现,提高了代码的可读性和维护性,是SSH框架下处理大数据量查询的必备组件。正确理解和使用此类插件,能够提升项目质量,优化用户...
通用SSH2结构的增删查改标准代码, bean,HBM文件为自定义, service,dao接口为标准可重用 ...action 调用通用service,service调用通用dao 调用关系用spring 配址文件设置 因为上传限制问题,把lib目录下的jar文件都删掉了
本资源“Hibernate_通用DAO模式”提供了一种适用于不同类型表单的DAO实现,基于SSH(Struts2、Spring、Hibernate)框架,特别强调简洁、易懂和高可移植性。 首先,SSH框架是Java Web开发中的经典组合,Struts2负责...
通过泛型,我们可以创建一个通用的DAO接口和实现,减少代码重复,提高代码复用。例如,我们可以创建一个`BaseDao<T>`接口,其中T代表任何实体类,然后针对每个实体类实现具体的DAO。 5. **分页**: 分页是Web应用中...
下面我们将详细讨论如何在Eclipse环境下整合并搭建一个SSH通用项目。 首先,我们需要理解SSH框架的每个组件: 1. Struts2:这是一个基于MVC设计模式的Java Web应用框架,用于处理用户请求,控制应用程序流程,并...
总的来说,SSH框架整合通用模板提供了一个成熟的开发环境,通过自定义标签分页、通用DAO和服务,使得开发人员可以快速构建应用,同时降低了维护成本。对于初学者或熟悉SSH的开发者来说,这是一个很好的学习和实践的...
总结来说,SSH框架在构建用户信息查询Web程序时,通过Struts2处理请求并转发,Spring管理组件和事务,Hibernate负责数据访问,三者协同工作,为高效开发提供了便利。在实际开发中,还需要注意异常处理、性能优化以及...
总的来说,Spring MVC SSH通用的JUnit测试样例是Java Web开发中不可或缺的工具,它们帮助开发者构建健壮、可维护的代码,同时提高开发效率。这些测试样例不仅提供了测试的模板,也是理解SSH和Spring MVC测试策略的...
此外,通用DAO实现通常是为了减少代码重复,提高代码复用性。开发者可以创建一个基础的DAO接口,如BaseDao,然后针对每个实体类(如商品实体)实现该接口,提供通用的CRUD方法。这样,业务逻辑层只需要与这些通用的...
通过定义一个通用的DAO接口,可以创建一个适用于多种实体类的DAO实现,简化了数据库操作。 5. **Proxool**: Proxool 是一个轻量级的数据库连接池,它可以高效管理数据库连接,避免了频繁创建和销毁连接带来的性能...
NULL 博文链接:https://ap0406708.iteye.com/blog/537709