前言(spring异常体系)
编写过JDBC的朋友应该都知道不捕获SQLException就几乎不能对数据库进行操作,SQLException是数据访问错误的通用异常,也就是说
任何数据访问错误都会出发SQLException,而不是每个可能的错误产生不同的异常。有些持久框架提供了丰富的异常体系,比如Hibernate大约有二十多个不同的异常,
但是Hibernate异常是私有的平台相关的,我们希望把特定持久机制与数据访问层分离开。
spring的平台无关的异常:
spring的异常体系庞大,几乎对数据库所有可能产生的错误提供了异常,但并没有与任何特定持久方式相关联,这意味着我们可以依靠spring来抛出一致的异常。为了使用spring的数据访问的异常,我们必须使用spring支持的数据访问模板之一。
JDBC的异常 | Spring的数据访问异常 |
BatchUpdateException DataTruncation SQLException SQLWarning | CannotAcquireLockException ConnotSerializeTransactionException CleanupFailureDataAccessException ConcurrencyFailureException DataAccessException DataAccessResourceFailureException DataIntegrityViolationException DataRetrievalFailureException DeadlockLoserDataAccessException EmptyResultDataAccessEexception ....more and more |
数据访问的模板化:
Spring把数据访问过程中固定与变化的部分明确的划分为两类:模板和回调。模板管理过程中的固定部分,而回调处理自定义的数据访问代码。
Spring提供了多个模板,针对不同的持久平台,下面是Spring全部的数据访问模板及用途。
模板类 | 用途 |
jca.cci.core.CciTemplate | JCA CCI连接 |
jdbc.core.Jdbc.Template | JDBC连接 |
jdbc.core.nameparam.NameParameterJdbcTemplate | 支持明明参数的JDBC连接 |
dbc.core.simple.SimpleJdbcTemplate | JDBC连接,用java 5概念进行了简化 |
orm.hibernate.HibernateTemplate | Hibernate 2.x 会话 |
orm.hibernate3.HibernateTemplate | Hibernate 3.x 会话 |
orm.ibatis.SqlMapClientTemplate | iBATIS SqlMap 客户 |
orm.jdo.JdoTemplate | Java数据对象实现 |
orm.JpaTemplate | Java存储API实体管理器 |
orm.toplink.TopLinkTemplate | Oracle的TopLink |
后面会介绍,使用数据访问模板只需要把它配置为spring上下文的Bean,然后把它织入到程序的DAO,或者还可以利用Spring的DAO支持类进一步简化DAO的配置。
使用DAO支持类:
在以后介绍Spring独特的数据访问支持选项时,我们回看到DAO支持类符合能够方便的访问相应的模板类。在编写自己的DAO实现时,可以从DAO类集成,并且调用模板获取方法来直接访问底层的数据访问模板。Spring不仅提供了多个数据访问模板,也日共了多个DAO支持类,分别对应于每个模板。下表为spring提供的DAO支持类
DAO支持类 | 支持 |
jca.cci.supportCciDaoSupport | JCA CCI连接 |
jdbc.core.support.JdbcDaoSupport | JDBC连接 |
jdbc.core.namedparam.NameParameterJdbcDaoSupport | 支持命名参数的JDBC连接 |
jdbc.core.simple.SimpleJdbcSupport | JDBC连接,用JAVA 5概念进行了简化 |
orm.hibernate.support.HibernateDaoSupport | Hibernate2.x会话 |
orm.hibernate3.support.HibernateDaoSupport | Hibernate3.x会话 |
orm.ibatis.support.SqlMapClientDaoSupport | iBATIS SqlMap客户 |
orm.jdo.support.JdoDaoSupport | Java数据对象实现 |
orm.jpa.support.JpaDaoSupport | Java存储API实体管理器 |
orm.toplink.support.TopLinkDaoSupport | Oracle的TopLink |