`
lxiaodao
  • 浏览: 121533 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

基于hibernate的通用、”万能“Dao的设计(一)

阅读更多
    基于springside3的Dao层设计思路,我按照个人想法改进了设计。基本的BaseDao,提供很多通用的操作方法,可以方便地扩展;设计一个泛型GenericDao,设计一个理想的万能UniversalDao(不能用于多数据源);
    springside3.1.2通过在service中注入sessionFactory的方式,间接new出来任何daomain的Dao,这样的方式我觉得不是很好,但是我仍然保留了泛型dao的这个能力。代码片段如下:
   
public GenericDao(SessionFactory sessionFactory, Class<T> entityClass) {
		super(sessionFactory);
		this.entityClass = entityClass;
    }

    上述方式提供的灵活性,但是我认为造成了分层混淆,既然service有了直接获取sessionFactory的能力,还需要Dao层干什么,直接把service和dao合并成一层,只保留service层就可以了(这样的做法很多人在实际项目中就是这么干的,简单直接有效,有的童鞋认为这种方式是最佳实践)。
    为什么要搞个万能UniversalDao?想偷懒撒。
    现有简单的对象User,Role,Group,都搞一遍UserDao,RoleDao,GroupDao,由于功能简单,都是空的,这样的dao就用一个UniversalDao搞定得了,调用方法的时候把class穿进去就可以了,干脆!
   
如get方法 public Object get(Class<?> clazz, Serializable id) {
		return this.getSession().get(clazz,id);
	}

    对于规模小的系统,复杂的方法都搞到service中,Dao层我认为OnlyOneDao一个就够了。   
    代码写出来了,用起来也不错,但是万能UniversalDao的优点、缺点也是很明显的,而且里面的方法相当于重复了BaseDao,使用的时候可能造成困惑,无奈的折中。当然,如果直接使用“涨血模型”,把Service、Dao能力都合并进domain最是彻底,但是Java里面实现起来还是太复杂、难看。
分享到:
评论
3 楼 lxiaodao 2010-01-15  
确实还没有仔细想过线程安全的问题,但是这里需要线程安全么,请详细说说。
2 楼 yuanhuiwu 2010-01-15  
------------父类
protected Class<?> entityClass;
-------------子类
public Object get(Class<?> clazz, Serializable id) {  
        this.entityClass = clazz;  
        return get(id);  
    }  

LZ有没有想过多用户环境下线程安全问题呢?
1 楼 huazi221 2010-01-01  
改为继承HibernateDaoSupport 就完美了

相关推荐

    hibernate4 通用dao,service

    由于没有具体的文件列表,我们无法详细讨论每个文件的内容,但根据标题和描述,我们可以推断这是一个关于使用Hibernate4创建通用DAO和Service的教程或资源,旨在帮助Java开发者理解和应用这种模式来提高开发效率。...

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

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

    Hibernate通用Dao设计。

    为了解决这个问题,我们可以通过设计一个通用的Hibernate DAO来减少重复工作。 1. **通用Dao的设计思想** - **继承机制**:创建一个基类AbstractHibernateDao,其中包含常用的CRUD(Create, Read, Update, Delete...

    Hibernate 原生通用DAO

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

    Hibernate的通用dao

    通用DAO(Data Access Object)是一种设计模式,用于封装对数据库的操作,提供一套可重用的接口,以简化数据访问层的开发工作。本篇将深入探讨Hibernate中的通用DAO实现及其相关知识点。 **一、Hibernate简介** ...

    hibernate spring通用dao

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

    本人写的Hibernate超级通用DAO

    在设计一个通用的Hibernate DAO时,我们通常会考虑以下几个关键点: 1. **基础设计**:创建一个基类,如`HibernateBaseDAO&lt;T&gt;`,其中`T`为实体类的类型参数。这个基类应包含Hibernate SessionFactory的初始化,以及...

    基于hibernate的泛型Dao框架

    标题中的“基于Hibernate的泛型Dao框架”是指在Java开发中使用Hibernate ORM工具,并结合泛型设计模式构建的数据库访问对象(DAO)框架。这样的框架旨在提高代码复用性,减少重复工作,使得数据访问层的实现更加简洁...

    HibernateDao 通用

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

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

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

    Hibernate通用Dao

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

    Java源代码一个简单的通用DAO实现(基于hibernate)

    Java源代码 一个简单的通用DAO实现 (基于hibernate)面向应用层按POJO类缓存hibernate的session对象.使用举例: DAO dao = DAOFactory.getDAO(POJO.class);//获得一个全局类单例的DAO实例 dao.save(pojo); 你也可以...

    Hibernate中的DAO模式

    **DAO(Data Access Object)模式**是软件设计模式中用于处理数据访问的一种方式,它将业务逻辑与数据访问层分离,提高代码的可重用性和可维护性。在Java领域,尤其是在企业级应用开发中,DAO模式常与ORM(Object-...

    hibernate通用dao

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

    hibernate不是泛型的通用DAo1

    然而,为了提高代码的复用性和可维护性,通常会设计一个通用DAO(Data Access Object)层来处理基本的数据操作。"hibernate不是泛型的通用DAo1"这个标题暗示了我们讨论的是一种非泛型化的DAO实现,可能是因为开发者...

    基于hibernate的简单留言本

    基于Hibernate的简单留言本是一个基本的Web应用程序,它使用Hibernate作为数据持久化层,用户可以通过该系统进行留言、查看留言以及回复等操作。这个系统展示了如何在实际项目中应用Hibernate来管理数据库交互。 ...

    Hibernate泛型Dao

    【描述】"基于hibernate5 泛型Dao实例,下载后改一下数据库配置直接可以用",意味着这个压缩包文件提供了一个已经实现好的Hibernate5版本的泛型Dao示例项目。用户只需要根据自己的数据库环境修改相应的配置信息,就...

    Haha.Hibernate SprintSideExt 通用HibernateDAO

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

    一个通用的Hibernate DAO

    - **作用**:提供了一个简单的文档说明,用于描述通用Hibernate DAO的设计思路和实现方法。 #### 三、标签:DAO - **含义**:DAO是Data Access Object的缩写,数据访问对象,是一种常用的设计模式。在本例中,特指...

Global site tag (gtag.js) - Google Analytics