• 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

  • 相关阅读:
    if __name__ == 'main': 的作用和原理
    第四篇、Python文件处理
    第二篇*2、Python字符串格式化
    第三篇、Python函数
    第二篇*1、Python基本数据类型
    ping包,支持ip录入
    layui之弹出层--从父窗口传递数据到子窗口
    动态调用WebService
    c# 类的反射实例 (GetType().Invoke().GetMethod().CreateInstance())
    ASP.Net UpdatePanel控件 局部刷新 && 弹出提示信息
  • 原文地址:https://www.cnblogs.com/lvjianwei/p/8000210.html
Copyright © 2020-2023  润新知