zoukankan      html  css  js  c++  java
  • Spring 实战-第十章-通过Spring和JDBC征服数据库

    Spring的数据访问哲学

    为了避免应用和特定的数据访问策略耦合,编写良好的Repository应该以接口的方式暴露功能。

    传统的JDBC抛出异常只有SQLException,太过笼统不利于定位问题,于此同时,Spring提供了更加丰富的数据库异常,这些异常都继承自DataAccessException,它的特殊之处在于是一个非检查异常,就是说在使用Spring的时候不需要捕获抛出的异常。

    Spring认为触发异常的很多问题是不能在catche代码块中修复的。Spring使用非检查型异常,而不是强制开发人员编写catch代码块,这把是否要捕获异常的权利留给了开发人员。

    Java JDBC编写的时候,需要编写大量相似的代码(如异常处理),这是非常乏味的事情,为了解决这个问题,Spring使用了模板方法的设计模式。模板方法定义了过程的主要框架,模板方法将过程中雨特定实现相关的部分委托给接口,而这个接口的不同实现定义了过程中的具体行为。

    Spring将数据访问过程中固定的和可变的部分明确划分为两个不同的类:模板(template)和回调(callback)。模板管理过程中固定的部分,而回调处理自定义的数据访问代码。

    针对不同的持久化平台,Spring提供了多个可选的模板。

    模板类(org.springframework.*) 用途
    jca.cci.core.CciTemplate JCA CCI连接
    jdbc.core.JdbcTemplate JDBC连接
    jdbc.core.namedparam.NamedParameterJdbcTemplate 支持命名参数的JDBC连接
    jdbc.core.simple.SimpleJdbcTemplate 通过Java5简化后的JDBC连接 
    orm.hibernate3.HibernateTemplate Hibernate 3.x以上的Session 
    orm.ibatis.SqlMapClientTemplate iBatis SqlMap客户端 
    orm.jdo.JdoTemplate Java数据对象(Java Data Object)实现 
    orm.jpa.JpaTemplate  Java持久化API的实体管理器

     配置数据源

     Spring提供了在Spring上下文中配置数据源bean的多种方式:

    • 通过JNDI查找的数据源,

    通过JNDI查找数据源的好处在于数据源完全可以在应用程序之外进行管理,另外,在应用服务器中管理的数据源通常以池的方式组织,从而具备更好的性能,并且支持热切换。

    • 连接池的数据源,

    Spring没有提供数据源链接池的实现,但是有很多第三方方案。

    • 通过JDBC驱动程序定义的数据源,

    通过JDBC驱动定义数据源是最简单的配置方式,Spring提供了三个数据源(org.springframework.jdbc.datasource包中):

    • DriverManageDataSource:在每个连接请求时都返回一个新建的连接。没有池管理。
    • SimpleDriverDataSource:直接使用JDBC驱动,解决特定环境下的类加载问题,如OSGi容器
    • SingleConnectionDataSource:在每个连接请求时都会返回同一个连接。
    • 使用嵌入式的数据源

    方便开发和测试,每次重启应用或者运行测试的时候,都能够重新填充测试数据。

    对于不同环境使用的不同的数据源,可是通过profile实现。

    在Spring中使用JDBC

    Java JDBC数据访问需要很多样板代码,用来保证数据访问的健壮性,Spring的JDBC框架承担了资源管理和异常处理的功能,从而简化了JDBC代码。

    Spring为JDBC提供了三个模板类共选择:

    • JdbcTemplate:最基本的Spring JDBC模板,这个模板支持简单的JDBC数据库访问功能以及基于索引参数的查询;
    • NamedParameterJdbcTemplate:使用该模板类执行查询时可以将值以命名参赛的形式绑定到SQL中,而不是使用简单的索引参数;
    • SimpleJdbcTemplate:改模板类利用Java 5的一些特性如自动装箱、泛型以及可变参数列表来简化JDBC模板的使用。(已废弃)

    使用JdbcTemplate的时候需要为JdbcTemplate配置数据源

        @Bean
        public JdbcTemplate jdbcTemplate(DataSource dataSorce){
            return new JdbcTemplate(dataSorce);
        }

    sourceCode:https://github.com/ljw8947/SpringInAction/tree/master/Chapter%2010/jdbc

  • 相关阅读:
    javascript深入理解js闭包
    【STL源码学习】STL算法学习之一
    【STL源码学习】细品vector
    【C++深入浅出】智能指针之auto_ptr学习
    【字典树应用】联想用户最想输入的词汇
    【数据结构】非常有用的hash表
    【WIN32进阶之路】:内存映射文件
    【WIN32进阶之路】:线程同步技术纲要
    win32进阶必备:多线程同步之互斥锁
    【C++深入浅出】设计模式学习之单例模式
  • 原文地址:https://www.cnblogs.com/lvjianwei/p/8000210.html
Copyright © 2011-2022 走看看