Hibernate 的 Dao 简写
Spring 为了简写SSH中的DAO层,提供了HibernateDaoSupport类。让我们基本上可以一句话就可以完成对数据库的一个原子操作(增,删,改,查)。
代码写久之后就发现,每个类中都有代码相似度达90%的(增,删,改,查)的5个方法。(查是两个方法)。
既然代码中只是 类名不同而已。想到用泛型抽象。代码如下:
DAO的接口:
import java.util.List;
/**
* 使用泛型编写 Dao中的增删改查。
* @author King_wangyao
*
* @param <T>
*/
public interface EntityDao<T> {
Integer save(T t);//保存一个对象。
Integer update(T t);//更新一个对象。
Integer delete(T t);//删除一个对象。
T get(Integer id);//根据ID查询一个对象。
List<T> find();//查询所有的对象。
}
DAO 的实现类:
@SuppressWarnings("unchecked")
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 save(T o) {
this.getHibernateTemplate().save(o);
return 1;
}
@Override
public Integer update(T o) {
this.getHibernateTemplate().saveOrUpdate(o);
return 1;
}
@Override
public Integer delete(T o) {
this.getHibernateTemplate().delete(o);
return 1;
}
@Override
public T get(Integer id) {
T o = (T) this.getHibernateTemplate().get(entityClass, id);
return o;
}
@Override
public List<T> find() {
List<T>list=this.getHibernateTemplate().find("from "+entityClass.getName());
if (list != null && list.size() > 0) {
return list;
}
return null;
}
}
使用DAO 接口:
public interface UserDao extends EntityDao<Admin>{
Admin find(String userName);
Admin find(String userName,String userPass);
}
DAO的实现类:
@SuppressWarnings("unchecked")
public class UserDaoHibernate extends EntityDaoSupport<Admin> implements UserDao {
public Admin find(String userName) {
List<Admin> list = this.getHibernateTemplate().find("from Admin where userName=?",userName);
if (list != null && list.size() > 0) {
return list.get(0);
}
return null;
}
public Admin find(String userName, String userPass) {
List<Admin> list = this.getHibernateTemplate().find("from Admin where userName=? and userPass=?",new String[]{userName,userPass});
if (list != null && list.size() > 0) {
return list.get(0);
}
return null;
}
}
这样以来,则可以在实际开发时写DAO层就不要每次都去写5大方法了。但在Service层中是可以正确调用的这5大方法的。
分享到:
相关推荐
- **含义**: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. **引入依赖**...