最近写代码涉及到一些事务,上午终于把代码给理顺了,之前不太清楚在哪里做异常处理,导致代码遍地try-catch,相当难看。
还是基于controller-service-dao三层来写代码,从入口开始,controller层的方法对应的是某个url,面向的是应用人员,应该返回他们能读懂的信息,所以controller必须做异常处理,一般来说会有统一的异常处理方法;
service层面向的是controller,service层中的某些方法,必须保证其事务,所以在service层进行事务控制是相当必要的,对于多条sql进行事务控制,如果某个sql执行失败,那么应当对已经执行的sql语句进行回滚;
dao层更多是单一的sql语句,没有必要进行事务控制,因为事务开销并不便宜(官方原话);
基于以上三点,回头再思考关于异常的处理,一般情况应该把异常网上抛,一直抛到最终处理的那一层,所以对于dao层和service其实是没有必要进行try-catch的,直接往上抛异常就可以。
与之对应的,是spring的事务配置,默认情况下,spring只对运行时异常进行回滚,如果在dao层处理了异常,那么需要进行额外的配置,spring才会对异常进行回滚,常用的配置是@Transactional(rollbackFor=Exception.class)
顺便提一个java知识点,关于try-catch-finally中,finally的作用,finally设计之初就是为了关闭资源,如果在finally中使用return语句,会覆盖try或者catch的返回值,最常见的就是覆盖异常,即便catch往上抛了异常,也会被覆盖,返回finally中return语句的返回值。
分享到:
相关推荐
生成Service文件时,代码生成器会创建Service接口和实现类,定义业务方法,并可能包含事务控制、异常处理等通用逻辑。这样,开发者可以直接专注于业务逻辑的实现,而不是重复的框架代码。 三、xuecheng-plus-...
在Spring MVC中,事务管理是保证数据一致性和完整性的关键部分,而异常处理则有助于确保系统在遇到错误时能够优雅地恢复或者向用户反馈合适的错误信息。接下来,我们将深入探讨Spring MVC中的事务配置和异常处理。 ...
- 开启事务注解:在需要事务控制的Service或Controller层方法上添加@Transactional注解。 4. **项目启动流程** - 环境部署:首先,确保所有依赖服务(如数据库、消息队列、配置中心等)正常运行。 - 应用启动:...
它用于标记数据库操作相关的类,这样Spring可以自动处理数据访问异常,并提供透明化的事务管理。通过这个注解,开发者可以利用Spring的数据访问支持,如JDBC、Hibernate或JPA等。 这些注解结合使用,可以帮助开发者...
同时,Service层可以处理事务控制、异常处理等复杂业务逻辑。 5. **Controller层(Controller)** Controller层负责接收前端请求,并调用Service层方法处理业务逻辑,最后将结果返回给前端。在MyBatis Plus的项目...
在本项目中,Servlet作为控制器(Controller),负责接收客户端的请求,调用业务逻辑(Service层),并把结果传递给JSP(View层)进行展示。例如,用户提交一个更新数据的请求,Servlet会接收到这个请求,然后调用...
在Java后端,Controller接收并处理来自用户的请求,Service层处理业务逻辑,而Dao(Data Access Object)层负责与数据库交互。这种架构使得各部分职责明确,有利于代码的复用和扩展。在这个框架中,我们可能会看到...
控制器层的异常可以通过Spring MVC的`@ExceptionHandler`处理,业务层的异常则需要在Service层捕获并通过事务回滚策略处理。 5. **页面跳转控制**:在异常发生后,我们通常需要将用户重定向到特定的错误页面,提供...
"s -p-r-m-v-c事务"可能是指Spring MVC中的Service层、Persistence层(如JPA或Hibernate)、Repository层、Model、View以及Controller之间的事务处理流程。接下来,我们将深入探讨这些组件以及如何在它们之间协调...
5. 在业务层调用Dao的代理对象:在Service层或Controller层,注入Dao的代理对象,通过代理对象调用Dao的方法,Spring会自动处理事务的生命周期。 通过这样的方式,我们能够实现Hibernate Dao层的自动事务管理,让...
以"base"命名的压缩包文件可能包含了Service层的基础组件或者基类,这些基类通常会提供一些通用的方法,如日志记录、异常处理、事务管理等。开发者可以通过继承这些基类来快速构建自己的Service类,避免重复编写相同...
在Java企业级开发中,服务层是业务逻辑的主要承载者,它与数据访问层(DAO)、控制层(Controller)以及视图层(View)共同构成了一个完整的MVC架构。以下是对ServiceDemo中可能涉及的关键知识点的详细解释: 1. **...
本文将深入探讨SSH配置的详细步骤以及在配置过程中可能遇到的异常处理。 首先,我们从Struts开始。Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架。配置Struts通常包括以下步骤: 1. 添加...
本文将深入探讨Spring注解开发中的事务控制,以及如何通过注解实现事务管理。 首先,让我们理解“注解”在Spring中的角色。注解是一种元数据,允许我们在代码中嵌入信息,这些信息可以被编译器或运行时环境读取。在...
自动生成的Service接口通常会包含DAO层的所有方法,以及可能的事务控制。同时,Service的实现类会完成具体的服务逻辑,包括异常处理和事务管理。这个工具可能还会提供一个AbstractService基类,包含一些通用的方法,...
5. 编写业务逻辑:Controller处理请求,Service层处理业务逻辑,Mapper层执行SQL操作。 通过以上步骤,我们可以构建出一个功能完善的SSM应用,实现与MySQL数据库的交互,并且具备完整的事务管理能力,满足企业级...
在基于Struts1.2和Spring2.0的架构中,通常会将`@Transactional`应用于Service层的方法,而Controller层负责接收请求并调用Service层。JDBC则用于与数据库进行交互。这样,事务的边界就被定义在Service层,确保了...
- **使用场景**:通常应用于Service层的方法,避免在Controller层涉及事务控制,以保持业务逻辑的简洁。 5. **事务传播行为** 事务传播行为定义了在一个事务方法被另一个事务方法调用时应该如何处理。例如,...
5. **错误处理**:在Service层,我们还可以添加异常处理,以优雅地处理可能出现的错误,如数据验证失败、数据库操作异常等。 6. **事务处理**:对于涉及多表操作或需要确保原子性的场景,可以在Service层使用...
**Controller层(请求处理层)** Controller层是系统的前端控制器,主要处理来自客户端的HTTP请求,转发到相应的Service层进行业务处理,并将处理结果返回给客户端。在这个系统中,Controller层可能包含了处理用户...