首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring-MVC最佳实践:为什么将事务放在服务上而不是DAO上?

在Spring MVC中,将事务放在服务层而不是DAO层上有以下几个原因:

  1. 业务逻辑的封装:服务层负责封装业务逻辑,将多个DAO操作组合成一个事务。将事务放在服务层可以更好地控制事务的边界,确保业务操作的一致性和完整性。如果将事务放在DAO层上,每个DAO方法都需要独立管理事务,容易出现事务边界不清晰的问题。
  2. 事务的可重用性:将事务放在服务层可以使得事务逻辑在不同的DAO方法中得到重用。如果将事务放在DAO层上,每个DAO方法都需要单独处理事务,导致事务逻辑无法重用,增加了代码的冗余性。
  3. 事务的粒度控制:将事务放在服务层可以更好地控制事务的粒度。服务层可以根据业务需求将多个DAO操作组合成一个事务,从而减少事务的开销。如果将事务放在DAO层上,每个DAO方法都需要独立管理事务,可能导致事务的粒度过细,增加了事务管理的开销。
  4. 事务的跨DAO支持:将事务放在服务层可以支持跨DAO的事务操作。在某些情况下,一个业务操作可能需要涉及多个DAO的操作,如果将事务放在DAO层上,跨DAO的事务操作将变得复杂。而将事务放在服务层可以更好地支持跨DAO的事务操作,提高了系统的灵活性和可扩展性。

综上所述,将事务放在服务层而不是DAO层上是为了更好地封装业务逻辑、提高事务的可重用性和粒度控制、支持跨DAO的事务操作。在Spring MVC中,可以使用Spring的声明式事务管理来实现将事务放在服务层的最佳实践。

腾讯云相关产品和产品介绍链接地址:

相关搜索:将node.js配置文件放在s3而不是同一台服务器上的最佳实践是什么更好的实践:将负载放在SQL或Web服务器上?如何将div悬停事件放在父级而不是子级上?填充剪辑将缩放元素放在顶部,而不是(实际上)在侧面如何在弹出窗口打开时立即将焦点放在选项卡上,而不是将焦点放在先前选择的值上将事件指定为核心项目而不是服务项目上的文件为什么Openstack Swift服务将所有数据/文件放在根目录,而不是我指定的分区?为什么Opera和Google Chrome会屏蔽远程服务器上的站点,而不是本地服务器上的站点?为什么这种网格布局不起作用?具体地说:为什么嵌套项排列成行,而不是放在网格上?为什么我的下拉菜单脱机工作,而不是在我的服务器上?你可以将一个tabindex放在HTML中的<a>元素上吗?当它被选中时,它被点击而不是必须输入?为什么Windows Server 2016中的Add-Content将文本写在一行上,而不是像我的Windows 10 PC那样写在多行上?有人知道为什么这个文件记录在本地主机上而不是github服务器上吗?wso2 - http PDF响应-将文件保存在WSO2服务器上,而不是下载如何将创建的镜像保存到服务器上的目录中,而不是下载到客户端在.net MVC中有没有什么方法可以将数据库数据导出到文件中,而不是放在本地机器上,并以文件附件的形式通过电子邮件发送。
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

代码的分层

对于一些难以说清楚的逻辑,我是这么区分的(不一定正确,但你可以参考):对于传统行业来说,原来的手动流程变为信息化流程的,都属于业务逻辑;而由信息化带来的增值服务(比如自动发短信通知),就属于应用逻辑,...DDD 只是把这些模式进行组合,形成了一套以领域模型模式为基础的最佳实践。...第二种属于事务脚本模式。Repository要么操作领域模型,要么返回领域模型,想这种既不操作也不返回的,实际是把Repository当Dao用了。...不要为了用而用DDD,不管代码的分层是不是按DDD的,最重要的是领域模型方式编程。 代码分层,适合自己的最佳实践才是最好的,但是要多学习借鉴。...---- 每周一句:推荐一本书——刘润的《底层逻辑》,类似一套思维框架,比如辨识能力-我们应该优先考虑的是"为什么"后面的观点是否成立,再去回答别人为什么

45310
  • 「首席架构看领域驱动设计」领域驱动的设计和开发最佳实践

    我们查看技术主管和架构师在实现工作中可以使用的指导方针、最佳实践、框架和工具。...这就是为什么注入存储库不是DAO会产生一个更干净的域模型的原因。不应该直接从客户机(服务和其他使用者类)调用DAO类。客户机应该总是调用域对象,域对象又应该调用DAO数据持久化到数据存储中。...例如,如果您可以使用后端中真实的DAO类(不是模拟DAO实现)和内存中的HSQL数据库(不是真实数据库)来测试实体类;它将使域层单元测试运行得更快,这是使用模拟对象背后的主要思想。...BDD通过提供跨越业务和技术之间的鸿沟的公共词汇表(普遍存在的语言),帮助开发重点放在交付优先级高的、可验证的业务价值。...通过使用关注于系统的行为方面不是测试方面的术语,BDD试图帮助开发人员注意力集中在TDD最成功的地方的真正价值

    1.6K30

    从零学习Spring(一)

    分层:一站式,每一个层都提供的解决方案 Web层:Struts,Spring-MVC Service层:Spring(其实Spring框架是横跨三层) Dao层:Hibernate,Mybatis,JdbcTemplate...OOP从横向上区分出一个个的类来,AOP则从纵向上向对象中加入特定的代码。有了AOP,OOP变得立体了。从技术上来说,AOP基本是通过代理机制实现的。...声明式事务的支持 只需要通过配置就可以完成对事务的管理,而无需手动编程,事务管理保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性。...就像银行的自助取款机,通常都能正常为客户服务,但是也难免遇到操作过程中机器突然出故障的情况,此时,事务就必须确保出故障前对账户的操作不生效,就像用户刚才完全没有使用过取款机一样,以保证用户和银行的利益都不受损失...Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

    1.6K10

    mybatis作用域和生命周期解读

    使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏习惯”。...SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。 绝对不能将 SqlSession 实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。...如果你现在正在使用一种 Web 框架,考虑 SqlSession 放在一个和 HTTP 请求相似的作用域中。...= null) { sqlSession.close(); } local.remove(); } } Dao数据访问层不应该进行事务的处理...,很多初学者都会犯这个错误,事务的处理应放在Service中处理  如上只在dao层面获取sqlSession进行数据的访问  在service层进行统一的数据提交才是正解,因为一个业务可能需要调研多次

    16110

    Go语言学习路线 - 5.基础篇:从一个web项目来谈Go语言的技能点

    所以,在我看来,这两个都并不是最佳方案,我非常建议有条件的项目能够直接引入 RPC级别的解决方案,例如gRPC。这块我会拿具体项目、花好几讲来好好说说。...第三层:DaoDao层常被理解为数据持久化层,但我们可以将它进行一定的延伸:RPC调用也当做Dao层(不妨认为数据持久化到了另一个服务),来适配微服务架构的场景。...严格意义,RPC调用和普通的Dao差异有不少,但为了收敛话题,我们暂且不细分。...、不是ORM工具的实现方式,数据库的原理是长期的积累,对技术选型和排查故障很有帮助。...至于不同的数据库ORM有不同的最佳实践,一一列举的工作量太大,我会在工程化的过程中选择性地讲解。

    88940

    2021 Java面试题大全(整理版)1000+面试题附答案详解,最全面详细,看完稳了!

    (答案) Java 最佳实践的面试问题 76、Java 中,编写多线程程序的时候你会遵循哪些最佳实践?...77、说出几点 Java 中使用 Collections 的最佳实践 78、说出至少 5 点在 Java 中使用线程的最佳实践。...79、说出 5 条 IO 的最佳实践(答案) 80、列出 5 个应该遵循的 JDBC 最佳实践 81、说出几条 Java 中方法重载的最佳实践?...101、Java 中如何字符串转换为整数? 102、在没有使用临时变量的情况如何交换两个整数变量的值? 关于 OOP 和设计模式的面试题 103、接口是什么?为什么要使用接口不是直接使用具体类?...4、设计微服务最佳实践是什么? 5、微服务架构如何运作? 6、微服务架构的优缺点是什么? 7、单片,SOA 和微服务架构有什么区别? 8、在使用微服务架构时,您面临哪些挑战?

    2.7K20

    由Spring应用的瑕疵谈谈DDD的概念与应用(二)

    该层往往关注于系统的可扩展性,更加贴近于软件工程实践,在面向对象中更多的是以类的视角进行思考设计。 DCI目前广泛被看作是对DDD的一种发展和补充,用在基于面向对象的领域建模。...在 DDD 的实现中,我们可以将对外的服务设计为 RESTful 风格的服务实体/值对象/领域服务作为资源对外提供增删改查服务。...但是并不建议直接实体暴露在外,一来实体的某些隐私属性并不能对外暴露,二来某些资源获取场景并不是一个实体就能满足。...因此我们在实际实践过程中,在领域模型增加了 DTO 这样一个角色,DTO 可以组合多个实体/值对象的资源对外暴露。...充血模型 充血模型和第二种模型差不多,所不同的就是如何划分业务逻辑,即认为,绝大多业务逻辑都应该被放在domain object里面(包括持久化逻辑),Service层应该是很薄的一层,仅仅封装事务和少量逻辑

    1.4K30

    互联网大厂年度总结1000+道高频面试题(附答案解析)冲刺2021

    (答案) Java 最佳实践的面试问题 76、Java 中,编写多线程程序的时候你会遵循哪些最佳实践?...77、说出几点 Java 中使用 Collections 的最佳实践 78、说出至少 5 点在 Java 中使用线程的最佳实践。...79、说出 5 条 IO 的最佳实践(答案) 80、列出 5 个应该遵循的 JDBC 最佳实践 81、说出几条 Java 中方法重载的最佳实践?...101、Java 中如何字符串转换为整数? 102、在没有使用临时变量的情况如何交换两个整数变量的值? 关于 OOP 和设计模式的面试题 103、接口是什么?为什么要使用接口不是直接使用具体类?...4、设计微服务最佳实践是什么? 5、微服务架构如何运作? 6、微服务架构的优缺点是什么? 7、单片,SOA 和微服务架构有什么区别? 8、在使用微服务架构时,您面临哪些挑战?

    4.4K00

    【JAVA代码审计】从零开始的Mybatis框架SQL注入审计()

    它对JDBC操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码...Mybatis一般是放在框架组合中使用的,数据库常见的框架组合包括SSM和SSH组合,即: 因此,学习Mybatis我们就需要知道SSM框架是怎么运作的。...通过动态代理的方式,MybatisDao层接口直接作为数据库映射文件。 //可以直接理解为:各种数据库操作方法记录在Dao接口中,因此我们控制数据库,直接调用dao接口中具体的方法即可。...此外,SSM框架通过Spring-MVC控制器(Controller)确定访问url: 例如上图,想要访问Teacher的getTeacherById查询方法对应的url为: http://127.0.0.1.../front/teacher/{teacherId} 综上,当我们输入url访问SSM框架服务时,服务端先根据url找到对应的Controller类中的方法;再根据方法中调用的具体对象与方法,一步步追溯到

    1.2K30

    后端开发实践系列——领域驱动设计(DDD)编码实践

    事实事务脚本并不是一种全然的反模式,在系统足够简单的情况下完全可以采用。...这种方式关注点优先放在了技术性的数据模型不是代表业务的领域模型,是DDD之反。...从技术讲,Repository和DAO所扮演的角色相似,不过DAO的设计初衷只是对数据库的一层很薄的封装,Repository是更偏向于领域模型。...但有时,有些业务逻辑并不适合于放在聚合根,比如前文的OrderIdGenerator便是如此,在这种“迫不得已”的情况下,我们引入领域服务(Domain Service)。...到此,再来反观在通常的实践中我们编写的Service类,事实这些Servcie类DDD中的ApplicationService和DomainService糅合在了一起,比如在”基于Service +

    1.2K31

    Spring知识点提炼

    Spring框架的作用 轻量:Spring是轻量级的,基本的版本大小为2MB 控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,不是创建或查找依赖的对象们。...容器:Spring包含并管理应用中对象的生命周期和配置 MVC框架: Spring-MVC 事务管理:Spring提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务JTA 异常处理:Spring...Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以声明性事务管理集成到应用程序中。...只读(read-only) 如果事务只进行读取的动作,则可以利用底层数据库在只读操作时发生的一些最佳化动作,由于这个动作利用到数据库在只读的事务操作最佳化,因而必须在事务中才有效,也就是说要搭配传播行为...事务超时(timeout) 有的事务操作可能延续很长一段的时间,事务本身可能关联到数据表的锁定,因而长时间的事务操作会有效率的问题,对于过长的事务操作,考虑Roll back事务并要求重新操作,不是无限时的等待事务完成

    65520

    Spring 知识点提炼

    Spring框架的作用 轻量:Spring是轻量级的,基本的版本大小为2MB 控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,不是创建或查找依赖的对象们。...容器:Spring包含并管理应用中对象的生命周期和配置 MVC框架: Spring-MVC 事务管理:Spring提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务JTA 异常处理:Spring...Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以声明性事务管理集成到应用程序中。...只读(read-only) 如果事务只进行读取的动作,则可以利用底层数据库在只读操作时发生的一些最佳化动作,由于这个动作利用到数据库在只读的事务操作最佳化,因而必须在事务中才有效,也就是说要搭配传播行为...事务超时(timeout) 有的事务操作可能延续很长一段的时间,事务本身可能关联到数据表的锁定,因而长时间的事务操作会有效率的问题,对于过长的事务操作,考虑Roll back事务并要求重新操作,不是无限时的等待事务完成

    89790

    Java面试题| 框架篇

    当应用了IOC,一个对象依赖的其它对象会通过被动的方式传递 进来,不是这个对象自己创建或者查找依赖对象。...AOP本身就是一种思想,意为面向切面编程,Spring对AOP做了部分实现,(举例说明)如果没有AOP,比如我们开发的系统中有发邮件,写日志,可想而知,系统中发邮件,写日志绝对的不是在一个地方用到,...他很大程度的简化DAO层的编码工作,软件开发人员从大量相同的数据持久层相关编程工作中解放出来,使开发更对象化了。...为什么要用?...我们还需要在控制层类加上@RestController注解(他相当于是spring-mvc中的@ResponseBody和@Controller的结合),其他的注解和spring,spring-mvc

    1.1K30

    Dubbo最佳实践,我整理了以下9点

    下面整理比较不错的Dubbo服务最佳实践,希望可以帮助我们少掉进一些坑,更好的使用Dubbo。...1 分包:公共API 建议服务接口,服务模型,服务异常等均放在 API 包中,因为服务模型及异常也是 API 的一部分,同时,这样做也符合分包原则: 重用发布等价原则(REP),共同重用原则(CRP)...2 粒度:接口 服务接口尽可能大粒度,每个服务方法应代表一个功能,不是某功能的一个步骤,否则将面临分布式事务问题,Dubbo 暂未提供分布式事务支持。...$echo(“OK”)); 在dubbo服务化后端的开发,最佳实践可以更好的指导我们进行相关的业务开发。...如果你对Dubbo服务最佳实践这方面有所见识,或者曾经遇到了一些坑,欢迎你留言评论,大家一起探讨,一起进步吧。

    2.5K40

    【Spring 篇】MyBatis DAO层实现:数据之舞的精灵

    接下来,我们深入了解DAO层的细节和相关内容。 场景2:DAO层的核心概念 在实现DAO层时,有一些核心概念需要理解。接下来,我们逐一介绍这些概念。...示例代码: UserDao userDao = sqlSession.getMapper(UserDao.class); 概念4:DAO层的事务管理 在MyBatis中,事务管理通常由Spring等框架来负责...我们可以通过在mybatis-config.xml中配置事务管理器来实现事务的控制。 场景3:DAO层的最佳实践 在实现DAO层时,有一些最佳实践可以帮助我们写出更清晰、可维护的代码。...层的实现步骤、核心概念和最佳实践。...DAO层就像是数据之舞的精灵,连接着业务逻辑和数据库,使数据的访问变得灵活优雅。希望你能在这片数据之舞的森林中,找到编写清晰、高效的DAO层代码的灵感。

    98610

    工程化专题之Maven(下)前言不同环境使用不同配置:Profile+Filter多模块开发:继承与聚合私服

    实质就是在执行mvn package -Pxxx而已。 我们来具体看一眼配置文件的内容信息: ?...plugin配置 上面的意思就是说把不同环境目录下的配置文件拷贝到classes下,不是classes下的XXX目录下。 比如我们选择profile为test打包,结果如下: ? war包结构 ?...对于Maven而言,我们可以一个大的复杂的项目,进行模块划分,这样各个模块各司其职,独立开发,这就涉及到继承与聚合了。 演示一个小Demo: ? 工程结构 ? 依赖关系 父工程关键片段: ?...service模块负责业务逻辑,需要依赖dao模块。由于依赖dao自然就引入了spring依赖,这里只需要加入事务的相关配置。...web模块负责前端交互,需要依赖service模块,以及spring-mvc。 到这里,对于多模块的继承和聚合就有点了解了吧。

    1.2K10

    SSH到底是什么?(彻底搞懂SSH,SSM)

    SSH不是一个框架,而是把多个框架(Struts、Spring以及Hibernate)紧密的结合在一起,用于构建灵活、易于扩展的多层Web应用程序。...SSH不是一个框架,而是把多个框架(Struts、Spring以及Hibernate)紧密的结合在一起,用于构建灵活、易于扩展的多层Web应用程序。...构建系统的基本业务流程是: 1、在表示层中,首先通过JSP页面实现交互界面,负责传送请求(Request)和接收响应(Response),然后Struts根据配置文件(struts-config.xml)ActionServlet...2、在业务层中,管理服务组件的Spring IoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性...Spring-MVC则是针对于方法级别的请求的,也就是一个方法对应于一个请求,属于方法拦截,请求的数据方法不共享。

    2.1K20

    优秀的代码都是如何分层的?

    这些类都归为 Helper ,用于提供底层的业务计算逻辑。而为什么放在通用工具层中呢?因为这些 Helper 其实都是依赖于特定的领域,即特定的业务。...这样的定义,其实是想将数据 CURD 的逻辑和业务逻辑进行分离,获 CRUD 封装在 DAO 中,业务逻辑即放在业务层中。...这里可能会想,为什么不将 Helper 的逻辑也放在 Manager 层中?...为什么我说的是“与充血领域模型的对比”不是“与 DDD 的对比”呢?是因为 DDD 是比分层模型更加高层的一种概念,它是一个产品服务,整个团队开发的一种指导思想,不是一种工程代码的规约。...在目前的分层模型中,哪怕是用 Java 这种面向对象的语言去写,其实总体还是一种过程式的编程,在 DDD 中称为事务脚本。 充血领域模型是重领域,轻 Service 的。

    3.6K50
    领券