`
Icgemu
  • 浏览: 71541 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

hibernate中对任何Entity通用的Dao方法

    博客分类:
  • Java
阅读更多
使用Hibernate不是很久,自己在边学习的过程中发现如果要每增加一个Entity就要实现一个DAO和DaoImp的话会比较麻烦,所以自己就写了下面这两个类来实现了对所有Entity通用的操作。

首先写一个 Dao  interface:
package com.cennavi.dao;

public interface Dao<T> {
	public void add(T a );
	public T find(Class<T> t,int id);
	public void delete(T t);
	public void update(T t);
}



使用泛型,把需要使用Dao的Entity抽象为T;

然后写一个实现类 DaoImp.class:

package com.cennavi.daoImp;

import org.hibernate.Session;
import org.hibernate.Transaction;

import com.cennavi.dao.Dao;
import com.cennavi.factory.HibernateSessionFactory;

public class DaoImp<T> implements Dao<T> {
	public Session sf=HibernateSessionFactory.getSession();
	
	@Override
	public void add(T obj) {
		Transaction ts=sf.beginTransaction();
		ts.begin();
		sf.save(obj);
		ts.commit();
	}

	@Override
	public void delete(T obj) {		
		Transaction ts=sf.beginTransaction();
		ts.begin();
		sf.delete(obj);
		ts.commit();
	}

	@SuppressWarnings("unchecked")
	@Override
	public T find(Class<T> t,int id) {
		Transaction ts=sf.beginTransaction();
		T obj=(T)sf.get(t, id);
		ts.commit();
		return obj;
	}

	@Override
	public void update(T obj) {
		Transaction ts=sf.beginTransaction();
		ts.begin();
		sf.saveOrUpdate(obj);
		ts.commit();
	}

}


当然没有完全泛型化,如find方法中的id.同时HibernateSessionFactory为一个sessionFactory的提供者。

下面是一个测试Entity
package com.cennavi.pojo;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class User implements Serializable {
	private static final long serialVersionUID = 1186025505012915442L;
	
	@Id
	@GeneratedValue
	private int id;
	private String name;
	private String snn;
	
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSnn() {
		return snn;
	}
	public void setSnn(String snn) {
		this.snn = snn;
	}
}


采用注解方法来注册Entity
下面类简单测试:

package com.cennavi.client;

import com.cennavi.dao.Dao;
import com.cennavi.daoImp.DaoImp;
import com.cennavi.pojo.BigUser;
import com.cennavi.pojo.User;

public class UserDaoImpTest {

	public static void main(String[] args) {
		Dao<User> dao=new DaoImp<User>();
		
		User user=new User();
		user.setName("roan");
		user.setSnn("1111111111111111111111");
		
		dao.add(user);
	}

}



以上只是为自己测试学习之用,比较简单。后来查找网络发现已经有完整的模版DAO,仅供参考罢了.
有了这个方法,自己学习起来速度当然加快拉,有了更多的时间去看书,不被重复的代码占用时间。
分享到:
评论
1 楼 Niklai 2009-09-17  
通用dao的想法是好的,对单个实体的操作也许行得通
但是在查询上不一定通用
查询很有可能会用上HQL语句,楼主对这种查询还没写出通用语句

另外如果涉及到多表关联的话,可能就更复杂一些了,楼主需要考虑得更全面一些

相关推荐

    Hibernate的通用dao

    本篇将深入探讨Hibernate中的通用DAO实现及其相关知识点。 **一、Hibernate简介** Hibernate是一个开源的ORM框架,它通过映射Java类到数据库表,实现了对象和关系数据库之间的无缝转换。通过使用Hibernate,开发者...

    hibernate不是泛型的通用DAo1

    "hibernate不是泛型的通用DAo1"这个标题暗示了我们讨论的是一种非泛型化的DAO实现,可能是因为开发者想要避免强制继承和泛型模板。 在描述中提到,开发者在网上寻找的大多数DAO实现都是泛型的,需要继承来使用。...

    Hibernate通用Dao设计。

    - 为了保证数据的一致性,通常需要在通用DAO中处理事务。可以使用Spring的TransactionTemplate或者AOP进行事务的声明式管理。 4. **性能优化** - 使用缓存机制:Hibernate支持一级缓存(Session级别的)和二级...

    hibernate通用dao

    **hibernate通用DAO(Data Access Object)**是软件开发中的一个重要概念,它主要用于数据库操作的抽象,使得业务逻辑层可以无需关注具体的SQL语句,从而实现数据访问的解耦。在Java EE应用中,Hibernate作为一款...

    基于泛型的通用Dao接口和hibernate的实现

    基于泛型的通用Dao接口和Hibernate的实现 基于泛型的通用Dao接口是指使用泛型来实现数据访问对象(DAO)的接口,主要是在使用 Hibernate 或 JPA 时使用。泛型可以使得DAO接口更灵活、更通用。 泛型Dao接口的优点:...

    Hibernate泛型Dao

    这个基类会包含一些通用的CRUD(Create, Read, Update, Delete)方法,如`save(T entity)`用于保存对象,`getById(ID id)`用于根据ID获取对象等。然后,对于每个实体类,你只需要创建一个接口,继承自`...

    HibernateDao.java

    - **设计模式**:考虑使用模板方法模式或者策略模式,将通用的数据库操作抽象出来,使得`HibernateDao.java`更具有复用性和灵活性。 总结,`HibernateDao.java`是Hibernate框架在实际项目中的重要实现,它封装了...

    java ssh通用DAO另类实现示例

    本示例将探讨一个通用DAO的另类实现方法,旨在提高代码复用性和简化开发过程。 首先,理解SSH框架中的DAO设计模式至关重要。DAO是一种设计模式,它为应用程序提供了一种抽象的接口,以便与数据库进行交互,同时避免...

    Struts2 Spring3 Hibernate 注解功能 DAO 泛型 通用分页

    在Hibernate4及以后的版本中,注解成为主要的映射方式,如`@Entity`标识实体类,`@Table`指定对应数据库表,`@Id`定义主键,`@GeneratedValue`自动生成主键值,以及`@Column`定义字段映射等。 在...

    泛型通用DAO,可以很简化DAO层的代码

    在泛型通用DAO中,我们可以定义一个泛型接口或抽象类,比如`GenericDao&lt;T&gt;`,其中`T`代表我们要操作的数据实体类型。这样,我们只需要为每种数据实体创建一个具体的DAO实现类,而无需为每个基本操作重复编写模板代码...

    Hibernate泛型DAO接口,大部分通用都已包括

    DAO是软件设计模式中的一种,它的主要职责是封装对数据源的访问,以提供业务逻辑层与数据存储层之间的解耦。通过使用DAO,我们可以更好地管理数据库操作,使其独立于业务逻辑,便于测试和重构。 泛型DAO是DAO模式的...

    Hibernate泛型DAO(结合spring模板支持)

    这种模式的核心在于利用Java的泛型特性,使得DAO方法可以处理任何类型的实体对象,而无需为每个实体类单独创建一个DAO实现。 首先,我们需要创建一个泛型DAO接口,如`GenericDao&lt;T&gt;`,其中`T`代表任意实体类类型。...

    Struts2+hibernate+spring整合泛型DAO

    在Struts2+Hibernate+Spring的集成中,泛型DAO扮演着重要的角色,它使得DAO层对所有实体类的操作变得统一和规范。 首先,让我们详细了解一下Struts2。Struts2是基于拦截器的MVC框架,它提供了强大的动作映射、结果...

    hibernate+dao实例

    通常,开发者会创建一个基类,比如HibernateDAO,提供通用的方法,然后为每个特定的数据模型创建继承自该基类的DAO实现。 在标签中,“源码”意味着讨论可能涉及到了具体的代码实现,而“工具”可能指的是Hibernate...

    action层,dao层 ,service层,entity层1

    在Java中,这些类通常被标记为`@Entity`,并使用JPA或Hibernate等ORM框架进行映射,以便于在Service层与DAO层之间传输和持久化数据。 5. **Util层(工具层)**: 这一层包含了一些通用的工具类和静态方法,比如...

    虚拟数据层 Struts2、Hibernate、Spring整合的泛型DAO Version 2010.9.27

    1)dao类的繁多,很多设计都是一个entity对应一个dao (不同的只有类名和方法名) 2)dao接口需要维护的method庞大。 3)业务逻辑改变时,dao需要同时修改两个类文件(接口和实现类) 在本文中,我将为您展示如何...

    spring hibernate 泛型DAO

    泛型DAO是一个通用的DAO实现,它使用Java的泛型特性,可以适用于任何继承自特定基类或者实现特定接口的数据实体类。这样,我们只需要编写一次DAO的通用实现,然后在需要的地方通过指定具体的类型即可。 下面是一个...

    Hibernate泛型DAO及使用方法.doc

    而泛型DAO(Data Access Object)则是基于Hibernate进一步抽象出来的一个设计模式,用于提供更通用的数据操作方法。本文档主要探讨了如何在Spring+Hibernate环境中创建和使用泛型DAO。 首先,我们来看一下泛型DAO...

    两个通用DAO

    标题中的“两个通用DAO”指的是在软件开发中,特别是Java后端开发中常见的两种数据库访问对象(DAO)设计模式。DAO是一种设计模式,用于封装对数据库的操作,将数据访问层与业务逻辑层分离,提高代码的可重用性和可...

    大家看看我设计的泛型DAO(使用Spring的Anotation和Hibernate)

    首先,`HibernateBaseDao.java`是基础的Hibernate DAO类,它提供了对Hibernate操作的基本封装。这个类通常会包含如打开和关闭Session、事务管理等通用功能。例如,它可能包含以下方法: 1. `getSessionFactory()`:...

Global site tag (gtag.js) - Google Analytics