14. DAO支持

    Spring为技术特定异常提供了一个适当的转化,例如:SQLException 所属异常类层级用DataAccessException 作为根异常,这些异常包括了原来的异常,所以不会有丢失可能出错信息的风险。

    除了JDBC异常,Spring也包含了Hibernate特定异常,将它们转换为一组集中的运行时异常(对JDO 和 JPA 异常也是如此),在合适的层次上处理多数不可恢复的持久化异常,而不会在dao上产生繁琐的catch-throw块和异常声明(仍然可以在认为合适的地方捕获和处理异常)。向上面提到的一样,JDBC异常(包括数据方言)也都转化为相同的层级结构,意味着在一个统一的项目模型中你也可以执行一些JDBC操作。

    下图展示了Spring提供的异常层级,(请注意:在这张图上显示出来的类层级仅仅是整个DataAccessException 的一个子集)

    使用注解是数据访问对象(DAOs)或库能提供异常转换的最好方式,这个注解还允许组件扫描,查找并配置你的 DAOs 和库,并且不需要为它们提供 XML 配置文件。

    如果你使用传统的Hibernate API,你可以注入SessionFactory:

    最后一个例子我们将在这里展示典型的JDBC支持,你将会在初始化方法中注入 DataSource ,在初始化方法中,你将使用这个DataSource创建一个JdbcTemplate 和其他与SimpleJdbcCall相似的数据访问支持类。