`
Clayz
  • 浏览: 297803 次
  • 性别: Icon_minigender_1
  • 来自: 东京
社区版块
存档分类
最新评论

Hibernate通用DAO

阅读更多
/**
 * @author Clay Zhong, zjclay@gmail.com
 * @date Dec 16, 2008
 */
package com.clay.dao;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;

@Repository
public class BaseDao<T, PK extends Serializable> extends HibernateDaoSupport {
    @Autowired
    public void setMySessionFactory(SessionFactory sessionFactory) {
        super.setSessionFactory(sessionFactory);
    }

    @SuppressWarnings("unchecked")
    public T get(PK id) {
        return (T) getHibernateTemplate().get(
                (Class) ((ParameterizedType) getClass().getGenericSuperclass())
                        .getActualTypeArguments()[0], id);
    }

    @SuppressWarnings("unchecked")
    public T load(PK id) {
        return (T) getHibernateTemplate().load(
                (Class) ((ParameterizedType) getClass().getGenericSuperclass())
                        .getActualTypeArguments()[0], id);
    }

    public void delete(PK id) {
        getHibernateTemplate().delete(get(id));
    }

    public void delete(T entity) {
        getHibernateTemplate().delete(entity);
    }

    public void save(T entity) {
        getHibernateTemplate().save(entity);
    }

    public void update(T entity) {
        getHibernateTemplate().update(entity);
    }

    public void saveOrUpdate(T entity) {
        getHibernateTemplate().saveOrUpdate(entity);
    }

    @SuppressWarnings("unchecked")
    public List<T> list() {
        return getHibernateTemplate().loadAll(
                (Class) ((ParameterizedType) getClass().getGenericSuperclass())
                        .getActualTypeArguments()[0]);
    }
}
 
分享到:
评论
2 楼 Clayz 2009-01-06  
你需要用一个实际对象的Dao类继承这个类。
例如,如果你用hibernate映射了一个User,在写UserDao的时候,可以这样写:
@Repository
public class UserDao extends BaseDao<User, Integer> {
    //some other method
}

然后就可以直接用超类里面的方法了,其余的Dao也类似。
看来应该将BaseDao改成abstract,以免误导。
1 楼 phanchun 2009-01-06  
我在调用的时候报错了,能给个使用的例子吗?我很笨!
Exception in thread "main" java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
at com.ucap.dgcsxg.business.dao.impl.BaseDao.get(BaseDao.java:23)
at com.ucap.dgcsxg.business.dao.impl.Main.main(Main.java:20)

相关推荐

    Hibernate通用Dao

    通用dao,简单全面,所有dao都可以继承这个dao.

    Hibernate通用Dao设计。

    综上所述,Hibernate通用DAO设计的核心在于抽象出共性的数据库操作,并通过泛型和继承等面向对象设计原则,达到代码复用的目的。这样不仅可以降低开发难度,还能提升系统的可维护性,对于大型项目尤其重要。通过学习...

    hibernate通用dao

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

    hibernate spring通用dao

    spring集成hibernate通用dao,泛型,server都可以调用

    Hibernate的通用dao

    **三、Hibernate通用DAO实现** 1. **接口定义**:首先,定义一个通用的DAO接口,如`BaseDao&lt;T&gt;`,其中T代表任何数据实体类型。接口中包含增删改查(CRUD)的基本方法,如`save()`, `update()`, `delete()`, `...

    本人写的Hibernate超级通用DAO

    《深入浅出Hibernate通用DAO设计与实践》 在软件开发中,数据访问对象(DAO)是用于处理数据库操作的重要组件,它可以将业务逻辑与数据访问层进行解耦,提高代码的可复用性和可维护性。本文将围绕“Hibernate超级...

    hibernate4 通用dao,service

    标题中的“hibernate4 通用dao,service”指的是在Java开发中使用Hibernate框架实现的通用数据访问对象(DAO)和业务服务层(Service)。Hibernate是一个流行的对象关系映射(ORM)工具,它允许开发者使用面向对象的...

    Hibernate 原生通用DAO

    **Hibernate原生通用DAO**是基于Hibernate框架设计的一种简化数据访问操作的方式,它模仿了Spring框架中的`HibernateTemplate`类,旨在提供一个简单易用的DAO(Data Access Object)层,方便开发人员进行数据库操作...

    Hibernate_通用DAO模式,一个写好的dao层

    本资源“Hibernate_通用DAO模式”提供了一种适用于不同类型表单的DAO实现,基于SSH(Struts2、Spring、Hibernate)框架,特别强调简洁、易懂和高可移植性。 首先,SSH框架是Java Web开发中的经典组合,Struts2负责...

    HibernateDao 通用

    HibernateDao 通用HibernateDao 通用HibernateDao 通用HibernateDao 通用HibernateDao 通用HibernateDao 通用HibernateDao 通用HibernateDao 通用HibernateDao 通用HibernateDao 通用HibernateDao 通用HibernateDao ...

    Hibernate封装dao层

    为了进一步提高代码的复用性,可以使用泛型来创建通用的DAO接口和实现。例如,`BaseDao&lt;T&gt;`,其中T代表实体类类型,这样就可以在不改变基本结构的情况下,为不同的实体类创建DAO。 6. **查询方法**: - 使用HQL...

    hibernate不是泛型的通用DAo1

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

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

    本篇将详细介绍"Hibernate泛型DAO接口,大部分通用都已包括"这一主题。 首先,让我们看看DAO的概念。DAO是软件设计模式中的一种,它的主要职责是封装对数据源的访问,以提供业务逻辑层与数据存储层之间的解耦。通过...

    HibernateDao.java

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

    Hibernate泛型Dao

    【标题】"Hibernate泛型Dao"是针对Java开发中的数据持久化框架Hibernate的一个高级应用,主要目的是为了提高代码的复用性和简洁性。在传统的Hibernate使用中,针对每个实体类,我们都需要创建一个对应的Dao(Data ...

    hibernate 通用接口架构

    "hibernate 通用接口架构"是指利用Hibernate框架,通过设计DAO(Data Access Object)层的接口来实现业务逻辑与数据访问的解耦,从而提高代码的可复用性和可维护性。 首先,我们来理解DAO层的作用。DAO层作为业务...

    Haha.Hibernate SprintSideExt 通用HibernateDAO

    Haha.Hibernate SprintSideExt 通用HibernateDAO 文章资源 详见:http://blog.csdn.net/lijun7788/article/details/6658847

    java ssh通用DAO另类实现示例

    总结:这个另类的Java SSH通用DAO实现利用了动态代理和Hibernate的特性,降低了代码复杂度,提高了代码复用性。它使得DAO层的维护变得更加简单,同时保持了良好的封装性和扩展性。在实际项目中,这样的设计可以显著...

    vc生成hibernate的dao类

    3. **模板定制**: 创建或编辑DAO类模板,模板中应包含通用的数据库操作方法,如save(), get(), update(), delete()等。 4. **代码生成工具**: 使用VC6.0中的插件或独立的代码生成工具,根据模板和实体类信息,自动...

Global site tag (gtag.js) - Google Analytics