spring3.x第八章 Spring对DAO的支持

来源:互联网 发布:java中类名的命名规则 编辑:程序博客网 时间:2024/05/20 11:35

8.1 Spring的DAO理念

  DAO(Data Access Object)用于访问数据的对象,虽然我们在大多数情况下,将数据保存在数据库中,但用户也可以将数据存储到文件中或LDAP中,DAO不但屏蔽了数据存储的最终介质的不同,也屏蔽了具体的实现技术的不同。

8.2 统一的异常体系

  Spring提供了一套和实现技术无关的、面向DAO层语义的异常体系,并通过转换器将不同持久化技术的异常转换成Spring的异常。

8.2.1 Spring的DAO异常体系

  Spring的异常体系都是建立在运行期异常的基础上,开发者可以根据需要捕捉感兴趣的异常。

8.2.2 JDBC的异常转换器

  传统的JDBC API在发生几乎所有的数据操作问题都抛出相同的SQLException,它将异常的细节性信息封装在异常属性中:错误码(getErrorCode())和SQL状态码(getSQLState())。

8.2.3 其他持久技术的异常转换器

  在org.springframework.orm包中。

8.3 统一数据访问模板

8.3.1 使用模板和回调机制

  JDBC数据访问操作按一下的流程进行:
  1.准备资源
  2.启动事务
  3.在事务中执行具体数据访问操作
  4.提交/回滚事务
  5.关闭资源,处理异常
  按照传统的方式,编写任何带事务的数据访问的程序时,都需要重复编写上面的代码。

8.3.2 Spring为不同持久化技术所提供的模板类

  所有的支持类都是abstract的,其目的使希望被继承使用,而非直接使用。

8.4 数据源

8.4.1 配置一个数据源

  Spring在第三方依赖包中包含了两个数据源的实现类包:其一是Apache的DBCP;其而是C3P0。可以在Spring配置文件中利用这两者中的任何一个配置数据源。

  DBCP数据源

  DBCP是一个依赖commons-pool对象池机制的数据库连接池。

<bean id="dataSource"    class="org.apache.commons.dbcp.BasicDataSource"    destroy-method="close"    p:driverClassName="com.mysql.jdbc.Driver"    p:url="jdbc:mysql://localhost:.3309/sampledb"    p:username="root"    p:password="123456" />

  BasicDataSource提供了close方法关闭数据源,所以必须设定destroy-method=”close”属性。

  C3P0数据源
<bean id="dataSource"    class="com.mchange.v2.c3p0.ComboPooledDataSource"    destroy-method="close"    p:driverClass="oracle.jdbc.driver.OracleDriver"    p:jdbcUrl="jdbc:oracle:thin:@localhost:1521:ora9i"    p:username="root"    p:password="123456" />
  使用属性文件
<context:property-placeholder location="/WEB-INF/jdbc.properties" /><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"    destory-method="close"    p:driverClassName="${jdbc.driverClassName}"    p:url="${jdbc.url}"    p:username="${jdbc.username}"    p:password="${jdbc.password}"

  在jdbc.properties属性文件中定义属性值

jdbc.driverClassName=com.mysql.jdbc.Driver...
8.4.2 获取JNDI数据源

  如果应用配置在高性能的应用服务器(如WebLogic或Websphere等)上,我们可能更希望使用应用服务器本身提供的数据源。

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"    p:jndiName="java:comp/env/jdbc/bbt" />
8.4.3 Spring的数据源实现类

  DriverManagerDataSource,没有提供池化连接的机制,每次调用getConnection()获取新连接时,只是简单地创建一个新的连接,用于单元测试。

DriverManagerDataSource ds = new DriverManagerDataSource();ds.setDriverClassName("com.mysql.jdbc.Driver");ds.setUrl("jdbc:mysql://localhost:3306/sampledb");ds.setUsername("root");ds.setPassword("123456");Connection actualCon = ds.getConnection();

8.5 小结

  Spring支持目前大多数常用的数据持久化技术,定义了一套面向DAO层的异常体系。
  不管采用何种持久化技术,访问数据的流程是相对固定的。并以模版的方式定义好流程。

0 0