- 浏览: 589681 次
- 性别:
- 来自: 青岛
文章分类
最新评论
-
Mr_胡:
确实是jquery版本问题,用新版本的jquery没用
Eclipse 支持jQuery 自动提示 -
redcoatjk:
那遇到事务怎么办?事务是配置到service上.在Listen ...
Listener中取Spring容器中Bean的实例 -
dqd979231776:
+1我用遇到了这个问题,解决了好长时间
<input type="image"> 和 <img> 用法区别 -
李庆辉:
Listener中取Spring容器中Bean的实例 -
骑驴走天下:
膜拜大神,讲的清楚明白,今天正好遇到这个问题,本想用大神说的第 ...
Listener中取Spring容器中Bean的实例
Spring 为了简写SSH中的DAO层,提供了HibernateDaoSupport类。让我们基本上可以一句话就可以完成对数据库的一个原子操作(增,删,改,查)。代码写久之后就发现,每个类中都有代码相似度达90%的(增,删,改,查)的5个方法。(查是两个方法)。既然代码中只是 类名不同而已。想到用泛型抽象。另外,HibernateDaoSupport对分页的支持不是很好,现重新书写一下。代码如下:
DAO 的接口:
/** * 使用泛型编写 Dao中的增删改查。 * * @author Administrator * * @param <T> */ public interface EntityDao<T> { /** * 保存对象。 * @param o 要保存的对象 * @return 返回保存的状态 */ Integer save(T o); /** * 更新对象。 * @param o 要更新的对象 * @return 返回更新的状态 */ Integer update(T o); /** * 删除对象。 * @param o 要删除的对象 * @return 返回删除的状态 */ Integer delete(T o); /** * 根据ID查询对象。 * @param id 要查询对象的ID * @return 返回查询的对象。 */ T get(Integer id); /** * 根据HQL查询对象 * @param HQL 要查询的HQL语句 * @return 返回查询的对象。 */ List<T> find(); }
DAO 的实现类:
@SuppressWarnings({ "unchecked", "hiding" }) public class EntityDaoSupport<T> extends MyHibernateDaoSupport implements EntityDao<T> { // 泛型的Class private Class<T> entityClass; // 根据反射得到泛型的class. public EntityDaoSupport() { entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; } @Override public Integer delete(T o) { this.getHibernateTemplate().delete(o); return 1; } @Override public List<T> find() { List<T> list = this.getHibernateTemplate().find("from " + entityClass.getName()); if (list != null && list.size() > 0) { return list; } return null; } @Override public T get(Integer id) { T o = (T) this.getHibernateTemplate().get(entityClass, id); return o; } @Override public Integer save(T o) { Serializable result=this.getHibernateTemplate().save(o); if(result!=null){ return 1; } return 0; } @Override public Integer update(T o) { this.getHibernateTemplate().saveOrUpdate(o); return 1; } /** * 根据给定的HQL查询。 * @param HQL 要查询的HQL语句 * @return 返回查询对象的集合。 */ public T get(String HQL) { List<T>list=this.getHibernateTemplate().find(HQL); if(list!=null && list.size()>0){ return list.get(0); } return null; } /** * 查询所有的对象。 * @return 返回查询对象的集合。 */ public List<T> find(String HQL) { List<T> list = this.getHibernateTemplate().find(HQL); if (list != null && list.size() > 0) { return list; } return null; } /** * 根据给定的HQL语句及参数查询。 * @param HQL 要查询的HQL语句 * @param arg 需要带入的参数 * @return 返回查询对象的集合。 */ public List<T> find(String HQL, Object arg) { List<T> list = this.getHibernateTemplate().find(HQL,arg); if (list != null && list.size() > 0) { return list; } return null; } /** * 根据给定的HQL语句及参数查询。 * @param HQL 要查询的HQL语句 * @param args 需要带入的参数数组 * @return 返回查询对象的集合。 */ public List<T> find(String HQL, Object... args) { List<T> list = this.getHibernateTemplate().find(HQL,args); if (list != null && list.size() > 0) { return list; } return null; } /** * 根据HQL查询对象 * @param HQL 要查询的HQL语句 * @param arg 需要带入的参数 * @return 返回查询的对象。 */ public T get(String HQL, Object arg) { List<T>list=this.getHibernateTemplate().find(HQL,arg); if(list!=null && list.size()>0){ return list.get(0); } return null; } /** * 根据HQL查询对象 * @param HQL 要查询的HQL语句 * @param args 需要带入的参数(数组) * @return 返回查询的对象。 */ public T get(String HQL, Object... args) { List<T>list=this.getHibernateTemplate().find(HQL,args); if(list!=null && list.size()>0){ return list.get(0); } return null; } /** * 执行HQL语句,执行执行Insert,Delete,Update 动作。 * @param HQL 要执行的HQL语句 * @return 返回执行的状态 */ public Integer execute(final String HQL) { return this.getHibernateTemplate().execute(new HibernateCallback<Integer>() { @Override public Integer doInHibernate(Session session) throws HibernateException,SQLException { Query query=session.createQuery(HQL); prepareQuery(query); return query.executeUpdate(); } }); } /** * 执行HQL语句,执行执行Insert,Delete,Update 动作。 * @param HQL 要执行的HQL语句 * @param arg 带入的参数 * @return 返回执行的状态 */ public Integer execute(final String HQL,final Object arg) { return this.getHibernateTemplate().execute(new HibernateCallback<Integer>() { @Override public Integer doInHibernate(Session session) throws HibernateException,SQLException { Query query=session.createQuery(HQL); prepareQuery(query); if(arg!=null){ query.setParameter(0, arg); } return query.executeUpdate(); } }); } /** * 执行HQL语句,执行执行Insert,Delete,Update 动作。 * @param HQL 要执行的HQL语句 * @param args 带入的参数数组 * @return 返回执行的状态 */ public Integer execute(final String HQL, final Object... args) { return this.getHibernateTemplate().execute(new HibernateCallback<Integer>() { @Override public Integer doInHibernate(Session session) throws HibernateException,SQLException { Query query=session.createQuery(HQL); prepareQuery(query); if (args != null) { for (int i = 0; i < args.length; i++) { query.setParameter(i, args[i]); } } return query.executeUpdate(); } }); } /** * 根据给定的HQL语句查询聚合函数(count,sum,max,min,avg..)返回结果 * @param HQL 要查询的HQL语句 * @return 返回查询的条数 */ public Integer findAgg(String HQL) { List<Object>list=this.getHibernateTemplate().find(HQL); if(list!=null && list.size()>0){ Object object=list.get(0); if(object!=null){ return Integer.parseInt(object.toString()); } } return 0; } /** * 根据给定的HQL语句查询聚合函数(count,sum,max,min,avg..)返回结果 * @param HQL 要查询的HQL语句 * @param arg 带入的参数 * @return 返回查询的条数 */ public Integer findAgg(String HQL, Object arg) { List<Object>list=this.getHibernateTemplate().find(HQL,arg); if(list!=null && list.size()>0){ Object object=list.get(0); if(object!=null){ return Integer.parseInt(object.toString()); } } return 0; } /** * 根据给定的HQL语句查询聚合函数(count,sum,max,min,avg..)返回结果 * @param HQL 要查询的HQL语句 * @param args 带入的参数(数组) * @return 返回查询的条数 */ public Integer findAgg(String HQL, Object... args) { List<Object>list=this.getHibernateTemplate().find(HQL,args); if(list!=null && list.size()>0){ Object object=list.get(0); if(object!=null){ return Integer.parseInt(object.toString()); } } return 0; } /** * 分页查询 * @param HQL 要查询的HQL语句 * @param maxResults 最大显示的行数 * @param firstResult 查询开始的行数 * @return 返回查询的集合 */ public List<T> find(final String HQL, final Integer maxResults, final Integer firstResult) { return this.getHibernateTemplate().executeWithNativeSession(new HibernateCallback<List<T>>() { @Override public List<T> doInHibernate(Session session)throws HibernateException, SQLException { Query query=session.createQuery(HQL); prepareQuery(query); query.setMaxResults(maxResults); query.setFirstResult(firstResult); List<T>list=query.list(); if(list!=null && list.size()>0){ return list; } return null; } }); } /** * 分页查询 * @param HQL 要查询的HQL语句 * @param maxResults 最大显示的行数 * @param firstResult 查询开始的行数 * @param arg 带入的参数 * @return 返回查询的集合 */ public List<T> find(final String HQL, final Integer maxResults, final Integer firstResult, final Object arg) { return this.getHibernateTemplate().executeWithNativeSession(new HibernateCallback<List<T>>() { @Override public List<T> doInHibernate(Session session)throws HibernateException, SQLException { Query query=session.createQuery(HQL); prepareQuery(query); query.setMaxResults(maxResults); query.setFirstResult(firstResult); if(arg!=null){ query.setParameter(0, arg); } List<T>list=query.list(); if(list!=null && list.size()>0){ return list; } return null; } }); } /** * 分页查询 * @param HQL 要查询的HQL语句 * @param maxResults 最大显示的行数 * @param firstResult 查询开始的行数 * @param args 带入的参数(数组) * @return 返回查询的集合 */ public List<T> find(final String HQL, final Integer maxResults, final Integer firstResult, final Object... args) { return this.getHibernateTemplate().executeWithNativeSession(new HibernateCallback<List<T>>() { @Override public List<T> doInHibernate(Session session)throws HibernateException, SQLException { Query query=session.createQuery(HQL); prepareQuery(query); query.setMaxResults(maxResults); query.setFirstResult(firstResult); if(args!=null){ for(int i=0;i<args.length;i++){ query.setParameter(i, args[i]); } } List<T>list=query.list(); if(list!=null && list.size()>0){ return list; } return null; } }); } /** * Prepare the given Query object, applying cache settings and/or * a transaction timeout. * @param queryObject the Query object to prepare * @see #setCacheQueries * @see #setQueryCacheRegion * @see SessionFactoryUtils#applyTransactionTimeout */ protected void prepareQuery(Query queryObject) { HibernateTemplate hibernateTemplate=this.getHibernateTemplate(); if (hibernateTemplate.isCacheQueries()) { queryObject.setCacheable(true); if (hibernateTemplate.getQueryCacheRegion() != null) { queryObject.setCacheRegion(hibernateTemplate.getQueryCacheRegion()); } } if (hibernateTemplate.getFetchSize() > 0) { queryObject.setFetchSize(hibernateTemplate.getFetchSize()); } if (hibernateTemplate.getMaxResults() > 0) { queryObject.setMaxResults(hibernateTemplate.getMaxResults()); } SessionFactoryUtils.applyTransactionTimeout(queryObject, getSessionFactory()); } /** * 执行SQL语句 * @param sql 要执行的sql语句 * @return 返回执行的状态 */ public Integer executeSql(final String sql) { return this.getHibernateTemplate().execute(new HibernateCallback<Integer>() { @Override public Integer doInHibernate(Session session) throws HibernateException,SQLException { SQLQuery sqlQuery=session.createSQLQuery(sql); prepareQuery(sqlQuery); return sqlQuery.executeUpdate(); } }); } }
使用
DAO 接口:
public interface UserDao extends EntityDao<Admin>{ Admin find(String userName); Admin find(String userName,String userPass); }
DAO的实现类:
public class UserDaoHibernate extends EntityDaoSupport<Admin> implements UserDao { public Admin find(String userName) { final String HQL="from Admin where userName=?"; return super.find(HQL,userName); } public Admin find(String userName, String userPass) { final String HQL="from Admin where userName=? and userPass=?"; return super.find(HQL,new String[]{userName,userPass}); } }
这样以来,则可以在实际开发时写DAO层就不要每次都去写5大方法了。但在Service层中是可以正确调用的这5大方法的。
注:HibernateDaoSupport 使用的是Spring3.0版本。
发表评论
-
ClassNotFoundException: org.hibernate.hql.ast.HqlToken 解决方法与原因
2013-06-28 10:08 937这是因为在Hibernate3.0 采用新的基于ANTLR的 ... -
Hibernate中用hql查询部分字段
2011-11-02 16:17 3060hql查询单表部分字段: 在hibernate中 ... -
什么叫n+1次select查询问题?
2010-03-25 16:36 1883在Session的缓存中存放的是相互关联的对象图。默认情况 ... -
hibernate的二级缓存(spring)
2010-01-11 17:04 4731hibernate3.X二级缓存的 ... -
org.springframework.orm.hibernate3.HibernateQueryException: unexpected token: me
2009-12-21 09:19 4423Hibernate 报错如下:org.springframe ... -
Hibernate SQL方言 (hibernate.dialect)
2008-06-13 22:40 6821数据库 hibernate方言 D ... -
hibernate C3P0数据源 连接Sql2005,2000数据库
2008-06-13 21:50 3224<?xml version="1.0" ... -
hibernate C3P0数据源 连接oracle数据库
2008-06-13 21:22 3577jdbc:oracle自带---class12.jar &l ... -
hibernate C3P0数据源 连接Access数据库
2008-06-13 20:22 6373<?xml version="1.0" ... -
hibernate C3P0数据源 连接MySQL数据库
2008-06-13 19:56 29571:mysql jdbc驱动: mysql-conncec ...
相关推荐
- **含义**:DAO是Data Access Object的缩写,数据访问对象,是一种常用的设计模式。在本例中,特指使用Hibernate框架实现的DAO。 - **作用**:表明本文档或代码主要关注的是基于Hibernate实现的DAO模式。 #### 四...
首先,DAO是Data Access Object的缩写,它是业务逻辑层和持久化层之间的桥梁,负责处理与数据库的交互,如查询、插入、更新和删除等操作。DAO的设计目标是将数据访问逻辑与业务逻辑分离,使得系统更易于测试和维护。...
2. **数据访问对象(DAO)**:Hibernate提供了Session接口,它是DAO层的主要接口,用于执行CRUD(创建、读取、更新、删除)操作。例如,通过`Session.save()`方法可以将对象保存到数据库,`Session.get()`用于获取...
"SSH"是Struts、Spring和Hibernate的缩写,代表了经典的JavaEE三层架构模型:表现层(Struts)、业务逻辑层(Spring)和数据访问层(Hibernate)。在这个场景中,我们将探讨如何在不使用`hibernate.cfg.xml`配置文件...
在IT行业中,SSH是一个常见的缩写,它代表了三个开源框架的组合:Spring、Struts和Hibernate。在这个“Spring与Hibernate整合实例(博客用户登录增删改查)”中,我们将探讨如何将这两个强大的框架——Spring和...
此外,ADU可能代表了Action、DAO(Data Access Object)和User Interface的缩写,这通常表示在三层架构中的分工:Action负责业务逻辑,DAO处理数据访问,而User Interface则是用户交互的界面。在实际项目中,Struts...
3. **DAO层**:数据访问对象,用于与数据库进行交互,使用Hibernate API进行CRUD操作。 4. **Service层**:业务逻辑层,处理业务规则,调用DAO操作数据。 5. **Action层**:Struts2的Action类,接收并处理请求,调用...
【文件名称】"Copy of S2SH"可能是指原项目名为S2SH的源代码文件,其中"S2SH"是Struts2、Spring和Hibernate的缩写。这个文件包含了整个项目的源码,包括但不限于控制器类、模型类、DAO(数据访问对象)层、服务层、...
SSH,即Spring、Struts和Hibernate的首字母缩写,是一种经典的Java Web开发框架组合,广泛应用于企业级应用系统开发。这个"hibernate+spring+sturts项目案例(含jar包)"提供了完整的SSH集成示例,对于初学者和有经验...
SSH是Spring、Struts和Hibernate三个开源框架的缩写,它们在Java Web开发中被广泛使用,构建了一个强大的MVC(Model-View-Controller)架构。在这个"SpringMVC+hibernate4+Spring4+mysql整合demo"中,我们将探讨如何...
在实际开发中,Struts负责处理用户请求,根据配置转发到相应的Action,Action再调用Hibernate的DAO进行数据操作。当操作完成后,Action将结果传递给JSP页面进行渲染,最终展示给用户。整个过程体现了MVC设计模式的...
SSH是Spring、Struts和Hibernate三个框架的缩写,它们共同构成了一套强大的Java EE开发解决方案。在这个汽车管理系统中,Spring作为整体的框架协调者,Hibernate负责数据持久化,而Spring MVC则处理Web层的请求响应...
SSH是三个开源Java框架的缩写,分别是Struts2、Hibernate3和Spring2.5,它们常被用于构建企业级的Web应用程序。SSH框架的整合提供了模型-视图-控制器(MVC)架构,持久层管理和依赖注入等功能,极大地提高了开发效率...
Spring作为“胶水”层,管理所有bean的生命周期,包括Struts的Action和Hibernate的DAO,同时提供事务管理;Hibernate则负责数据持久化,通过配置文件和注解将Java对象与数据库表进行映射。 压缩包中的"RCHSSH"可能...
文件名"shs"可能代表Struts、Spring、Hibernate的缩写,暗示了这个实例涵盖了这三者的核心内容。 在Struts中,控制器由Action类实现,处理用户请求并调用相应的服务层方法。通过配置struts.xml文件,我们可以定义...
【压缩包子文件的文件名称列表】"sprh"可能是项目源代码的简写,具体包含了论坛系统的各个组件,如实体类、配置文件、DAO、Service、Controller等,以及可能的测试代码和日志文件。通过分析这些源代码,可以深入理解...
在 "DaoDemo" 这个文件名中,“Dao”是Data Access Object的缩写,常用于封装对数据库的操作,所以这个文件可能是nut dao的一个简单示例。 在创建 "Hello World" 应用时,我们通常会做以下几步: 1. **引入依赖**...