Spring的DAO框架没有抛出与特定技术相关的异常,例如SQLException或HibernateException,抛出的异常都是与特定技术无关的org.springframework.dao.DataAccessException类的子类,避免系统与某种特殊的持久层实现耦合在一起。DataAccessException是RuntimeException,是一个无须检测的异常,不要求代码去处理这类异常,遵循了Spring的一般理念:异常检测会使代码到处是不相关的catch或throws语句,使代码杂乱无章;并且NestedRuntimeException的子类,是可以通过NestedRuntimeException的getCause()方法获得导致该异常的另一个异常。Spring的异常分类有
Spring的DAO异常层次
异常 |
何时抛出 |
CleanupFailureDataAccessException | 一项操作成功地执行,但在释放数据库资源时发生异常(例如,关闭一个Connection) |
DataAccessResourceFailureException | 数据访问资源彻底失败,例如不能连接数据库 |
DataIntegrityViolationException | Insert或Update数据时违反了完整性,例如违反了惟一性限制 |
DataRetrievalFailureException | 某些数据不能被检测到,例如不能通过关键字找到一条记录 |
DeadlockLoserDataAccessException | 当前的操作因为死锁而失败 |
IncorrectUpdateSemanticsDataAccessException | Update时发生某些没有预料到的情况,例如更改超过预期的记录数。当这个异常被抛出时,执行着的事务不会被回滚 |
InvalidDataAccessApiusageException | 一个数据访问的JAVA API没有正确使用,例如必须在执行前编译好的查询编译失败了 |
invalidDataAccessResourceUsageException | 错误使用数据访问资源,例如用错误的SQL语法访问关系型数据库 |
OptimisticLockingFailureException | 乐观锁的失败。这将由ORM工具或用户的DAO实现抛出 |
TypemismatchDataAccessException | Java类型和数据类型不匹配,例如试图把String类型插入到数据库的数值型字段中 |
UncategorizedDataAccessException | 有错误发生,但无法归类到某一更为具体的异常中 |
Spring的DAO异常层次是如此的细致缜密,服务对象能够精确地选择需要捕获哪些异常,捕获的异常对用户更有用的信息,哪些异常可以让她继续在调用堆栈中向上传递。
PS: 如果用jpa需要用saveAndFlush而不是save即,一定要flush()否则dao层捕获不到异常
相关推荐
Sullivan 在其文章中探讨了 DAO 编程中三个常常被忽视但至关重要的方面:事务界定、异常处理以及日志记录。 #### 二、事务界定 事务界定是指在 DAO 操作中定义事务边界的过程,确保数据的一致性和完整性。事务是...
在Java中,可以使用try-catch-finally语句块,或者使用@ControllerAdvice等Spring注解进行全局异常处理。 10. **安全性**:考虑到留言板可能会有用户注册、登录等功能,因此安全问题不容忽视。这包括但不限于密码...
在实践中,开发者可能会遇到如版本兼容性、性能优化、异常处理等问题。例如,选择合适的Struts2拦截器来提高性能,使用Spring的AOP进行日志记录,或者利用Hibernate的二级缓存提升数据库操作速度。此外,安全方面也...
在本示例中,Spring可以管理Struts2的Action类,通过IoC(Inversion of Control)容器自动注入所需的Service或DAO,以减少代码间的耦合。同时,Spring的AOP可以用于事务管理,确保在图片上传或下载操作中出现异常时...
在业务逻辑处理过程中,Spring的事务管理确保了数据操作的原子性和一致性,防止因异常导致的数据不一致问题。 此外,系统的安全性也是一个重要方面。Spring Security可以用来实现用户认证和授权,保护系统的敏感...
Spring框架作为Java开发领域中的核心组件,它的影响力和实用性不容忽视。本篇文章将基于“Spring帮助文档”展开深入探讨,旨在为开发者提供一份详尽的Spring学习指南。通过链接...
"ems_s3"可能是指一个具体的项目或者模块,它可能是整合了Struts2、Spring和Hibernate的一个示例应用,可能包含了Action、Service、DAO等层次的代码,以及相关的配置文件。"all-lib"文件夹很可能包含了所有必要的库...
此外,日志记录、异常处理、性能监控等也是项目开发中不可忽视的部分。 总之,这个"springmvc-mybatis项目"为初学者提供了一个基础的Java Web开发环境,通过学习和实践,你可以掌握SpringMVC和MyBatis的核心概念,...
9. **异常处理**:为了提高程序健壮性,需要设置全局的异常处理机制,捕获和处理可能出现的运行时异常。 10. **安全性**:虽然这个实训项目较为基础,但安全性问题不应忽视。应避免SQL注入,考虑使用预编译的...
监控、日志收集和异常处理也是运维中不可忽视的部分。 这个"基于SSM+MySQL的新疆旅游管理系统源码数据库"项目涵盖了Java Web开发的多个重要方面,对于想要深入理解SSM框架以及Java Web开发的人员来说,是一个宝贵的...
SSH框架整合是Java开发中常见的技术栈,主要包括Spring、Struts和Hibernate三个核心组件。Spring作为依赖注入(DI)和面向切面编程(AOP)的容器,负责管理对象及对象之间的关系;Struts作为MVC框架,处理HTTP请求并...
这些元素共同构建了iBatis的数据访问层,使得开发者可以自定义SQL语句,避免了传统的DAO模式中的大量重复代码。 其次,书中会深入讲解如何使用iBatis进行CRUD(创建、读取、更新、删除)操作。这涵盖了动态SQL的...
在后端,这部分涉及到数据查询、更新和删除操作,需要编写对应的Service和DAO层代码,通过Spring MVC的控制器接收请求,调用Service层方法,然后返回响应。 在开始开发之前,对于本地环境的设置,开发者需要安装...
同时,还需要注意异常处理、事务管理和安全性等问题,这些都是整合过程中不可忽视的环节。 在实际项目中,开发者还需要掌握如何测试和调试整合后的系统,例如使用JUnit进行单元测试,利用Mockito模拟外部依赖,以及...
6. **Spring框架**:可能用于依赖注入和事务管理,提高系统的可扩展性和稳定性。Spring JDBC或MyBatis框架可以帮助简化数据库操作。 7. **Hibernate或MyBatis**:ORM(对象关系映射)框架,可以将Java对象直接映射...
同时,通过Spring的事务管理,可以确保数据操作的一致性,防止出现数据异常。 此外,汽车共享平台可能涉及到复杂的业务逻辑,如预约机制、计费规则、信用评估等。这些都需要在Service层进行详细设计和实现。例如,...
- 如果这是一个完整的项目,那么安全性也是不可忽视的部分,可能需要引入Spring Security进行身份验证和授权,防止未授权的增删查改操作。 8. **测试**: - 开发过程中,单元测试和集成测试是确保代码质量的关键...
此外,系统的安全性、并发处理和异常处理也是开发过程中不可忽视的部分。 源代码部分,除了业务逻辑处理,还会包含控制器层(Controller)、服务层(Service)、持久层(Mapper/DAO)以及视图层(View)。...
8. **忽视异常处理**:忽略异常或者仅仅打印堆栈信息,可能导致问题难以定位,应提供适当的异常处理机制。 9. **不使用设计模式**:设计模式是解决常见问题的最佳实践,不使用它们可能导致代码质量下降。 10. **...
《基于SSM+JSP+JavaWeb的个人健康信息管理系统》是一个典型的...此外,安全性、性能优化、异常处理和测试也是开发过程中不可忽视的部分。这样的系统对于个人健康管理、数据分析以及医疗咨询等领域都有一定的应用价值。