`
feiyang404
  • 浏览: 56084 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
B7dcf87c-a349-3458-aa59-9c6036b3f5f6
从零开始一步一步做论坛
浏览量:10109
社区版块
存档分类
最新评论

关于DAO层的疑惑!!!平地一声雷

阅读更多

最近一直在考虑一个问题,在S2SH开发中,DAO层到底应该怎么写?是一个通用DAO呢还是各个Model的DAO分开呢?

 

如果是各个MOdel的DAO分开写,这样会有很多重复代码,几乎每个DAO类里面都包含save,delete,update,load等一样标签的方法,和重用性相抵触,而且在application.xml中配置非常麻烦,每个DAO都得引用sessionFactory,这样配置文件也有很多冗余!

 

我个人认为,dao层只应提供数据持久化接口,和数据库,Service层均没有关系,如果持久化框架变了,比如不用Hibernate,而改用ibatIS,那么只需要将DAO里面的实现稍作改动,整个系统就可以流畅运行.所以,这就要求在Service层不要写HQL或者QBC,Service层专注调用DAO层接口为Action层提供服务,和DAO层无耦合.这样如果写一个通用DAO层的话,就会提高代码重用性,并且xml配置也很简洁,只要配置一个通用的dao就可以了,但是却使以牺牲灵活性为前提的,比如在Service层需要一个按属性查询的方法,那么在DAO层就要写where子句(where xxx=yyy),但是通用dao不可能知道xxx,怎么办呢?

 

如果通用DAO层接受Service层传来的HQL的话,那就会很容易写出一个灵活性高,重用性强的DAO通用层,但是这样又有了耦合性,持久化框架变化的话要改变的代码会很多,甚至可以说是牵一发而动全身.

 

所以,到底该怎么设计DAO层呢,思考良久,觉得,还是通用DAO比较合理一点,配置文件少,重用性高,这是大方向,然后如何写出一个和Service层无关的又有很高灵活性的DAO层,一直困扰我,各位大虾们,请说说你们的看法,你们有没有更好的方法?或者我的这个困惑是不是应该有的?该不该放弃低耦合?

 

 

最后,我希望大家不要用经验和我谈问题,经验都是看别人的代码学来的,真正思考过这个问题的才有发言权...

分享到:
评论

相关推荐

    Service层和DAO层解析

    Spring框架通过依赖注入(Dependency Injection,DI)实现了这一目标,使得Service层可以通过接口引用DAO层的实现,而不是直接创建DAO实例。这增强了系统的可测试性和可扩展性,因为Service层可以通过配置文件或注解...

    C#特性标签实现通用Dao层

    在C#编程中,"通用Dao层"是一个常见的设计模式,用于封装数据库操作,使得业务逻辑层能够专注于处理业务规则,而无需关心底层数据访问的细节。本篇将重点探讨如何利用C#的特性(Attribute)标签来实现这一目标,同时...

    简单DAO层示例

    在IT行业中,DAO(Data Access Object)层是软件设计模式中的一个重要组成部分,它主要用于数据库操作,隔离了业务逻辑层与数据存储层之间的交互。在这个"简单DAO层示例"中,我们将探讨DAO的设计原则、实现方式以及...

    DAO层_Service层_Controller层、View层介绍

    DAO层_Service层_Controller层、View层的一些了解知识,帮助填充对这部分比较空白的开发者们。

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

    标题和描述中提到的"action层,dao层,service层,entity层"是这种分层架构的典型组成部分,下面将详细解释每一层的功能和它们之间的交互。 1. **Action层(控制层)**: 这一层主要负责接收用户的请求,进行业务...

    SpringBoot 多模块Dao层单元测试

    对于多模块的Spring Boot项目,每个模块可能包含不同的组件,如Service层、Controller层和Dao层。Dao层主要负责与数据库交互,因此它的单元测试通常涉及对数据库操作的模拟,而无需实际连接到数据库。 1. **配置多...

    javadao层的编写

    Java的dao层和service层,很不错的哦!

    dao层自动生成

    在IT行业中,DAO(Data Access Object)层是软件设计模式中的一个重要组成部分,它主要用于封装对数据库的操作,使得业务逻辑层与数据访问层解耦。"DAO层自动生成"这一技术旨在提高开发效率,减少手动编写重复代码的...

    dao层基类dao层基类dao层基类

    dao层基类dao层基类dao层基类dao层基类dao层基类

    mybatisDAO层自动生成插件

    MyBatis DAO层自动生成插件是一个非常实用的工具,它极大地简化了开发过程中DAO(Data Access Object)层的编写工作。MyBatis是Java领域的一款流行持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,使得...

    图书管理系统DAO层代码

    本项目是关于一个图书管理系统的DAO层实现,适合初学者理解和学习。 首先,"图书管理系统"是一个常见的应用场景,它涉及到书籍信息的添加、查询、修改和删除等操作。在设计此类系统时,我们需要考虑实体类(Entity ...

    Spring的作用贯穿了整个中间层,将Web层、Service层、DAO层及PO无缝整合

    本文主要探讨Spring如何贯穿整个中间层,将Web层、Service层、DAO层以及PO(Plain Old Java Object)无缝整合起来。 #### 二、Spring框架的关键作用 1. **无缝整合**:Spring框架的一个显著特点是能够将不同的技术...

    项目model、Dao层、业务层建模工具类

    本资源提供了一种用于项目model、Dao层、业务层建模的工具类,旨在简化开发流程,提高代码复用性。下面我们将详细探讨这些知识点。 首先,"model"层通常指的是领域模型(Domain Model),它是业务逻辑的核心,包含...

    经典泛型dao层代码,非常好用简易

    本文将深入探讨一种在SSH(Struts+Spring+Hibernate)框架中广泛应用的经典泛型DAO层实现方式,旨在展示其简洁性、高效性和灵活性。 #### 泛型DAO层:概念与优势 泛型DAO层通过利用Java的泛型机制,提供了一种类型...

    DAO与三层结构

    - 关于事务管理在三层结构中的处理,如何在DAO中控制事务边界 `Base_DAO.rar`可能包含的资源有: - 基础DAO接口和实现类的源代码,例如AbstractDAO、UserDAOImpl等 - 相关的配置文件,如Spring的XML配置,用于声明...

    生成mybatis的实体类+dao层+xml层

    在开发过程中,手动编写实体类、DAO(Data Access Object)层和对应的XML配置文件是一项繁琐的工作,尤其当数据库表数量庞大时。为了提高开发效率,我们可以借助特定的工具或插件来实现自动代码生成,这就是"生成...

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

    在Java编程领域,DAO(Data Access Object)模式是一种常见的设计模式,用于封装对数据库的操作,以解耦业务逻辑层和数据存储层。泛型通用DAO是这种模式的一种优化,它利用了Java 5.0引入的泛型和反射机制,大大简化...

    mvc中dao层反射实现

    通过以上步骤,我们可以构建一个灵活的DAO层,只需更改配置或实现类名,就能适应不同的数据存储需求,而无需修改核心业务代码。这种设计提高了代码的可复用性和可维护性,也是企业级应用中常见的做法。

    dao自动生成工具 基于ibator 只需要设置少量参数就能 创建dao层所有类

    ibator-huoniao通过它你可以通过配置少量参数,通过一键生成dao层的全部文件,能够应付对dao层的所有操作 产物包括: 1. pojo文件 2. dao接口类 3. dao接口实现类文件 4. ibatis sql map文件 5. 数据库查询时...

    JSP直接获取dao层数据实例 java mysql jsp dao

    在Java Web开发中,JSP(JavaServer Pages)通常用于创建动态网页,而DAO(Data Access Object)层则负责数据库交互。在这个实例中,我们将探讨如何在JSP中直接调用DAO层来获取MySQL数据库中的数据。这涉及到几个...

Global site tag (gtag.js) - Google Analytics