`

Hibernate 的 Dao 简写

    博客分类:
  • Java
阅读更多
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大方法的。
分享到:
评论

相关推荐

    一个通用的Hibernate DAO

    - **含义**:DAO是Data Access Object的缩写,数据访问对象,是一种常用的设计模式。在本例中,特指使用Hibernate框架实现的DAO。 - **作用**:表明本文档或代码主要关注的是基于Hibernate实现的DAO模式。 #### 四...

    自动生成DAO源代码

    首先,DAO是Data Access Object的缩写,它是业务逻辑层和持久化层之间的桥梁,负责处理与数据库的交互,如查询、插入、更新和删除等操作。DAO的设计目标是将数据访问逻辑与业务逻辑分离,使得系统更易于测试和维护。...

    hibernate3.0 jar包

    2. **数据访问对象(DAO)**:Hibernate提供了Session接口,它是DAO层的主要接口,用于执行CRUD(创建、读取、更新、删除)操作。例如,通过`Session.save()`方法可以将对象保存到数据库,`Session.get()`用于获取...

    JavaEE spring和Hibernate整合(没有hibernate.cfg.xml)

    "SSH"是Struts、Spring和Hibernate的缩写,代表了经典的JavaEE三层架构模型:表现层(Struts)、业务逻辑层(Spring)和数据访问层(Hibernate)。在这个场景中,我们将探讨如何在不使用`hibernate.cfg.xml`配置文件...

    Spring与Hibernate整合实例(博客用户登录增删改查)

    在IT行业中,SSH是一个常见的缩写,它代表了三个开源框架的组合:Spring、Struts和Hibernate。在这个“Spring与Hibernate整合实例(博客用户登录增删改查)”中,我们将探讨如何将这两个强大的框架——Spring和...

    Struts HIbernate Spring 增删改的实例

    此外,ADU可能代表了Action、DAO(Data Access Object)和User Interface的缩写,这通常表示在三层架构中的分工:Action负责业务逻辑,DAO处理数据访问,而User Interface则是用户交互的界面。在实际项目中,Struts...

    struts2+spring+hibernate示例

    3. **DAO层**:数据访问对象,用于与数据库进行交互,使用Hibernate API进行CRUD操作。 4. **Service层**:业务逻辑层,处理业务规则,调用DAO操作数据。 5. **Action层**:Struts2的Action类,接收并处理请求,调用...

    会员管理系统struts+hibernate+spring

    【文件名称】"Copy of S2SH"可能是指原项目名为S2SH的源代码文件,其中"S2SH"是Struts2、Spring和Hibernate的缩写。这个文件包含了整个项目的源码,包括但不限于控制器类、模型类、DAO(数据访问对象)层、服务层、...

    hibernate+spring+sturts项目案例(含jar包)

    SSH,即Spring、Struts和Hibernate的首字母缩写,是一种经典的Java Web开发框架组合,广泛应用于企业级应用系统开发。这个"hibernate+spring+sturts项目案例(含jar包)"提供了完整的SSH集成示例,对于初学者和有经验...

    SpringMVC+hibernate4+Spring4+mysql整合demo

    SSH是Spring、Struts和Hibernate三个开源框架的缩写,它们在Java Web开发中被广泛使用,构建了一个强大的MVC(Model-View-Controller)架构。在这个"SpringMVC+hibernate4+Spring4+mysql整合demo"中,我们将探讨如何...

    struts+hibernate的论坛

    在实际开发中,Struts负责处理用户请求,根据配置转发到相应的Action,Action再调用Hibernate的DAO进行数据操作。当操作完成后,Action将结果传递给JSP页面进行渲染,最终展示给用户。整个过程体现了MVC设计模式的...

    基于spring、hibernate、spring mvc的汽车管理系统demo

    SSH是Spring、Struts和Hibernate三个框架的缩写,它们共同构成了一套强大的Java EE开发解决方案。在这个汽车管理系统中,Spring作为整体的框架协调者,Hibernate负责数据持久化,而Spring MVC则处理Web层的请求响应...

    ssh最新整合+验证码(struts2,hibernate3,spring2.5)

    SSH是三个开源Java框架的缩写,分别是Struts2、Hibernate3和Spring2.5,它们常被用于构建企业级的Web应用程序。SSH框架的整合提供了模型-视图-控制器(MVC)架构,持久层管理和依赖注入等功能,极大地提高了开发效率...

    struts Spring hibernate整合(含源码和数据库)

    Spring作为“胶水”层,管理所有bean的生命周期,包括Struts的Action和Hibernate的DAO,同时提供事务管理;Hibernate则负责数据持久化,通过配置文件和注解将Java对象与数据库表进行映射。 压缩包中的"RCHSSH"可能...

    Struts_Spring_Hibernate(1)实例

    文件名"shs"可能代表Struts、Spring、Hibernate的缩写,暗示了这个实例涵盖了这三者的核心内容。 在Struts中,控制器由Action类实现,处理用户请求并调用相应的服务层方法。通过配置struts.xml文件,我们可以定义...

    Hibernate配置源码

    【压缩包子文件的文件名称列表】"sprh"可能是项目源代码的简写,具体包含了论坛系统的各个组件,如实体类、配置文件、DAO、Service、Controller等,以及可能的测试代码和日志文件。通过分析这些源代码,可以深入理解...

    nut dao的hello world

    在 "DaoDemo" 这个文件名中,“Dao”是Data Access Object的缩写,常用于封装对数据库的操作,所以这个文件可能是nut dao的一个简单示例。 在创建 "Hello World" 应用时,我们通常会做以下几步: 1. **引入依赖**...

Global site tag (gtag.js) - Google Analytics