Spring DAO 数据模板和数据源

2019-08-01 0 By admin

三、统一数据访问模板

3.1、访问数据库的流程

以JDBC为例,访问数据库的操作大致按照以下流程进行:
准备资源、启动事务、在事务中执行具体的数据访问操作、提交/回滚事务、关闭资源及处理异常。
而其中除了在事务中执行具体的数据访问操作是业务相关的,其他代码都是几乎固定不变的。

3.2、Spring DAO的模板

Spring将这个相同的数据访问流程固化到模板类中,并将数据访问中固定和变化的部分分开,同时保证模板类是线程安全的,以便多个数据访问线程共享同一个模板实例。
固定的部分在模板类中已经准备好,而变化的部分通过回调接口开放出来,用于定义具体数据访问和结果返回的操作。
这样,只要编写好回调接口,并调用模板类进行数据访问,就可以得到预想的结果。

Spring dao template

3.3、不同持久化技术的模板类

Spring为各种支持的持久化技术都提供了简化操作的模板和回调,在回调中编写具体的数据操作逻辑,使用模板执行数据操作。

ORM持久化技术 模板类
JDBC org.springframework.jdbc.core.JdbcTemplate
JHibernate org.springframework.orm.hibernate.HibernateTemplate
JJPA org.springframework.orm.JpaTemplate
JJDO org.springframework.orm.jdo.JdoTemplate

如果直接使用模板类,则一般需要在DAO中定义一个模板对象并提供数据资源。
Spring为每种持久化技术都提供了支持类,支持类中已经完成了这样的功能。
这样,只需扩展这些支持类,就可以直接编写实际的数据访问逻辑,因此更加方便。
这些支持类都继承于dao.support.DaoSupport类,DaoSupport类实现了InitializingBean接口,在afterPropertiesSet()接口方法中检査模板对象和数据源是否被正确设置,否则将抛出异常。

OORM持久化技术 支持类
JJDBC oorg.springframework.jdbc.core.JdbcDaoSupport
JHibernate oorg.springframework.orm.hibernate.HibernateDaoSupport
JJPA oorg.springframework.orm.jpa.JpaDaoSupport
JJDO oorg.springframework.orm.jdo.JdoSupport

四、数据源

不管采用何种持久化技术,都必须拥有数据连接。
在 Spring中,数据连接是通过数据源获得的。
在Spring中,不但可以通过JNDI获取应用服务器的数据源,也可以直接在Spring容器中配置数据源,还可以通过代码的方式创建一个数据源,以便进行无容器依赖的单元测试。
省略配置数据源示例:配置DBCP数据源、配置C3P0数据源、配置Druid数据源和配置JNDI。

4.1、Spring数据源

Spring本身也提供了一个简单的数据源实现类DriverManagerDataSource,它位于org. springframework.jdbc.datasource包中。
这个类实现了Javax.sql.DataSource接口,但它并没有提供池化连接的机制;每次调用 getConnectionO方法获取新连接时,只是简单地创建一个新的连接。
因此,这个数据源类比较适合在单元测试或简单的独立应用中使用,因为它不需要额外的依赖类。

五、Spring ORM框架好处

5.1、方便基础设施的搭建

对于不同的ORM框架,始终可以采用相同的方式配置数据源;Spring还为不同的ORM框架提供了相应的FactoryBean,用以初始化ORM框架的基础设施,可以将它们当成普通的Bean对待。

5.2、异常封装

Spring能够转换各种ORM框架所抛出的异常,将ORM框架专有的或检査型异常转换为Spring DAO异常体系中的标准异常。

5.3、统一的事务管理

通过使用基于 Spring DAO模板的编程风格,甚至使用ORM框架原生的API,只要遵循 Spring所提出的很少的编程要求,就可以使用 Spring提供的事务管理功能。此外,JDBC代码能够在事务级别上与用户使用的ORM框架一起使用。这一功能对于诸如批量处理、LOB操作等并不适合单独采用ORM完成的地方尤其有用。

5.4、允许混合使用多个ORM框架

Spring在DAO异常、事务、资源等高级层次建立了抽象,因而可以让业务层对DAO具体实现的技术不敏感,可以在底层选用适合的实现方式,甚至可以混合使用多种ORM

5.5、方便单元测试

Spring容器使得替换不同的实现和配置变得非常简单,这些内容包括 HibernateSession Factory的位置、 JDBC DataSource、事务管理器及映射对象的实现等,这样就很容易隔离并测试不同的DAO类。