使用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,仅供参考罢了.
有了这个方法,自己学习起来速度当然加快拉,有了更多的时间去看书,不被重复的代码占用时间。
分享到:
相关推荐
本篇将深入探讨Hibernate中的通用DAO实现及其相关知识点。 **一、Hibernate简介** Hibernate是一个开源的ORM框架,它通过映射Java类到数据库表,实现了对象和关系数据库之间的无缝转换。通过使用Hibernate,开发者...
"hibernate不是泛型的通用DAo1"这个标题暗示了我们讨论的是一种非泛型化的DAO实现,可能是因为开发者想要避免强制继承和泛型模板。 在描述中提到,开发者在网上寻找的大多数DAO实现都是泛型的,需要继承来使用。...
- 为了保证数据的一致性,通常需要在通用DAO中处理事务。可以使用Spring的TransactionTemplate或者AOP进行事务的声明式管理。 4. **性能优化** - 使用缓存机制:Hibernate支持一级缓存(Session级别的)和二级...
**hibernate通用DAO(Data Access Object)**是软件开发中的一个重要概念,它主要用于数据库操作的抽象,使得业务逻辑层可以无需关注具体的SQL语句,从而实现数据访问的解耦。在Java EE应用中,Hibernate作为一款...
基于泛型的通用Dao接口和Hibernate的实现 基于泛型的通用Dao接口是指使用泛型来实现数据访问对象(DAO)的接口,主要是在使用 Hibernate 或 JPA 时使用。泛型可以使得DAO接口更灵活、更通用。 泛型Dao接口的优点:...
这个基类会包含一些通用的CRUD(Create, Read, Update, Delete)方法,如`save(T entity)`用于保存对象,`getById(ID id)`用于根据ID获取对象等。然后,对于每个实体类,你只需要创建一个接口,继承自`...
- **设计模式**:考虑使用模板方法模式或者策略模式,将通用的数据库操作抽象出来,使得`HibernateDao.java`更具有复用性和灵活性。 总结,`HibernateDao.java`是Hibernate框架在实际项目中的重要实现,它封装了...
本示例将探讨一个通用DAO的另类实现方法,旨在提高代码复用性和简化开发过程。 首先,理解SSH框架中的DAO设计模式至关重要。DAO是一种设计模式,它为应用程序提供了一种抽象的接口,以便与数据库进行交互,同时避免...
在Hibernate4及以后的版本中,注解成为主要的映射方式,如`@Entity`标识实体类,`@Table`指定对应数据库表,`@Id`定义主键,`@GeneratedValue`自动生成主键值,以及`@Column`定义字段映射等。 在...
在泛型通用DAO中,我们可以定义一个泛型接口或抽象类,比如`GenericDao<T>`,其中`T`代表我们要操作的数据实体类型。这样,我们只需要为每种数据实体创建一个具体的DAO实现类,而无需为每个基本操作重复编写模板代码...
DAO是软件设计模式中的一种,它的主要职责是封装对数据源的访问,以提供业务逻辑层与数据存储层之间的解耦。通过使用DAO,我们可以更好地管理数据库操作,使其独立于业务逻辑,便于测试和重构。 泛型DAO是DAO模式的...
这种模式的核心在于利用Java的泛型特性,使得DAO方法可以处理任何类型的实体对象,而无需为每个实体类单独创建一个DAO实现。 首先,我们需要创建一个泛型DAO接口,如`GenericDao<T>`,其中`T`代表任意实体类类型。...
在Struts2+Hibernate+Spring的集成中,泛型DAO扮演着重要的角色,它使得DAO层对所有实体类的操作变得统一和规范。 首先,让我们详细了解一下Struts2。Struts2是基于拦截器的MVC框架,它提供了强大的动作映射、结果...
通常,开发者会创建一个基类,比如HibernateDAO,提供通用的方法,然后为每个特定的数据模型创建继承自该基类的DAO实现。 在标签中,“源码”意味着讨论可能涉及到了具体的代码实现,而“工具”可能指的是Hibernate...
在Java中,这些类通常被标记为`@Entity`,并使用JPA或Hibernate等ORM框架进行映射,以便于在Service层与DAO层之间传输和持久化数据。 5. **Util层(工具层)**: 这一层包含了一些通用的工具类和静态方法,比如...
1)dao类的繁多,很多设计都是一个entity对应一个dao (不同的只有类名和方法名) 2)dao接口需要维护的method庞大。 3)业务逻辑改变时,dao需要同时修改两个类文件(接口和实现类) 在本文中,我将为您展示如何...
泛型DAO是一个通用的DAO实现,它使用Java的泛型特性,可以适用于任何继承自特定基类或者实现特定接口的数据实体类。这样,我们只需要编写一次DAO的通用实现,然后在需要的地方通过指定具体的类型即可。 下面是一个...
而泛型DAO(Data Access Object)则是基于Hibernate进一步抽象出来的一个设计模式,用于提供更通用的数据操作方法。本文档主要探讨了如何在Spring+Hibernate环境中创建和使用泛型DAO。 首先,我们来看一下泛型DAO...
标题中的“两个通用DAO”指的是在软件开发中,特别是Java后端开发中常见的两种数据库访问对象(DAO)设计模式。DAO是一种设计模式,用于封装对数据库的操作,将数据访问层与业务逻辑层分离,提高代码的可重用性和可...
首先,`HibernateBaseDao.java`是基础的Hibernate DAO类,它提供了对Hibernate操作的基本封装。这个类通常会包含如打开和关闭Session、事务管理等通用功能。例如,它可能包含以下方法: 1. `getSessionFactory()`:...