开涛spring3(6.9) - 对JDBC的支持 之 7.1 概述

7.1  概述

7.1.1  JDBC回顾

传统应用程序开发中,进行JDBC编程是相当痛苦的,如下所示:

    //cn.javass.spring.chapter7. TraditionalJdbcTest
    @Test
    public void test() throws Exception {
        Connection conn = null;
        PreparedStatement pstmt = null;
        try {
          conn = getConnection();              //1.获取JDBC连接
                                           //2.声明SQL
          String sql = "select * from INFORMATION_SCHEMA.SYSTEM_TABLES";
          pstmt = conn.prepareStatement(sql);    //3.预编译SQL
          ResultSet rs = pstmt.executeQuery();   //4.执行SQL
          process(rs);                       //5.处理结果集
          closeResultSet(rs);                 //5.释放结果集
          closeStatement(pstmt);              //6.释放Statement
          conn.commit();                    //8.提交事务
        } catch (Exception e) {
          //9.处理异常并回滚事务
          conn.rollback();
          throw e;
        } finally {
          //10.释放JDBC连接,防止JDBC连接不关闭造成的内存泄漏
          closeConnection(conn);
        }
    }  

以上代码片段具有冗长、重复、容易忘记某一步骤从而导致出错、显示控制事务、显示处理受检查异常等等。

有朋友可能重构出自己的一套JDBC模板,从而能简化日常开发,但自己开发的JDBC模板不够通用,而且对于每一套JDBC模板实现都差不多,从而导致开发人员必须掌握每一套模板。

Spring JDBC提供了一套JDBC抽象框架,用于简化JDBC开发,而且如果各个公司都使用该抽象框架,开发人员首先减少了学习成本,直接上手开发,如图7-1所示。

图7-1 Spring JDBC与传统JDBC编程对比

7.1.2  Spring对JDBC的支持

Spring通过抽象JDBC访问并提供一致的API来简化JDBC编程的工作量。我们只需要声明SQL、调用合适的Spring JDBC框架API、处理结果集即可。事务由Spring管理,并将JDBC受查异常转换为Spring一致的非受查异常,从而简化开发。

Spring主要提供JDBC模板方式、关系数据库对象化方式和SimpleJdbc方式三种方式来简化JDBC编程,这三种方式就是Spring JDBC的工作模式:

  •  JDBC模板方式:Spring JDBC框架提供以下几种模板类来简化JDBC编程,实现GoF模板设计模式,将可变部分和非可变部分分离,可变部分采用回调接口方式由用户来实现:如 JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate。
  • 关系数据库操作对象化方式:Spring JDBC框架提供了将关系数据库操作对象化的表示形式,从而使用户可以采用面向对象编程来完成对数据库的访问;如MappingSqlQuery、 SqlUpdate、SqlCall、SqlFunction、StoredProcedure等类。这些类的实现一旦建立即可重用并且是线程安全的。
  • SimpleJdbc方式:Spring JDBC框架还提供了SimpleJdbc方式来简化JDBC编程,SimpleJdbcInsert 、 SimpleJdbcCall用来简化数据库表插入、存储过程或函数访问。

Spring JDBC还提供了一些强大的工具类,如DataSourceUtils来在必要的时候手工获取数据库连接等。

7.1.4    Spring的JDBC架构

Spring JDBC抽象框架由四部分组成:datasource、support、core、object。如图7-2所示。

图7-2 Spring JDBC架构图

support包:提供将JDBC异常转换为DAO非检查异常转换类、一些工具类如JdbcUtils等。

datasource包:提供简化访问JDBC 数据源(javax.sql.DataSource实现)工具类,并提供了一些DataSource简单实现类从而能使从这些DataSource获取的连接能自动得到Spring管理事务支持。

core包:提供JDBC模板类实现及可变部分的回调接口,还提供SimpleJdbcInsert等简单辅助类。

       object包:提供关系数据库的对象表示形式,如MappingSqlQuery、SqlUpdate、SqlCall、SqlFunction、StoredProcedure等类,该包是基于core包JDBC模板类实现。

时间: 2024-10-04 10:00:02

开涛spring3(6.9) - 对JDBC的支持 之 7.1 概述的相关文章

开涛spring3(7.2) - 对JDBC的支持 之 7.2 JDBC模板类

7.2  JDBC模板类 7.2.1  概述 Spring JDBC抽象框架core包提供了JDBC模板类,其中JdbcTemplate是core包的核心类,所以其他模板类都是基于它封装完成的,JDBC模板类是第一种工作模式. JdbcTemplate类通过模板设计模式帮助我们消除了冗长的代码,只做需要做的事情(即可变部分),并且帮我们做哪些固定部分,如连接的创建及关闭. JdbcTemplate类对可变部分采用回调接口方式实现,如ConnectionCallback通过回调接口返回给用户一个连

开涛spring3(7.5) - 对JDBC的支持 之 7.5 集成Spring JDBC及最佳实践

7.5 集成Spring JDBC及最佳实践 大多数情况下Spring JDBC都是与IOC容器一起使用.通过配置方式使用Spring JDBC. 而且大部分时间都是使用JdbcTemplate类(或SimpleJdbcTemplate和NamedParameterJdbcTemplate)进行开发,即可能80%时间使用JdbcTemplate类,而只有20%时间使用其他类开发,符合80/20法则.   Spring JDBC通过实现DaoSupport来支持一致的数据库访问. Spring J

开涛spring3(7.3) - 对JDBC的支持 之 7.3 关系数据库操作对象化

7.3.1  概述 所谓关系数据库对象化其实就是用面向对象方式表示关系数据库操作,从而可以复用. Spring JDBC框架将数据库操作封装为一个RdbmsOperation,该对象是线程安全的.可复用的对象,是所有数据库对象的父类.而 SqlOperation继承了RdbmsOperation,代表了数据库SQL操作,如select.update.call等,如图7-4所示. 数据库操作对象化只要有以下几种类型,所以类型是线程安全及可复用的: 查询:将数据库操作select封装为对象,查询操作

开涛spring3(7.4) - 对JDBC的支持 之 7.4 Spring提供的其它帮助

7.4  Spring提供的其它帮助 7.4.1  SimpleJdbc方式 Spring JDBC抽象框架提供SimpleJdbcInsert和SimpleJdbcCall类,这两个类通过利用JDBC驱动提供的数据库元数据来简化JDBC操作. 1.SimpleJdbcInsert: 用于插入数据,根据数据库元数据进行插入数据,本类用于简化插入操作,提供三种类型方法:execute方法用于普通插入. executeAndReturnKey及executeAndReturnKeyHolder方法用

开涛spring3(8.1) - 对ORM的支持 之 8.1 概述

8.1  概述 8.1.1  ORM框架 ORM全称对象关系映射(Object/Relation Mapping),指将Java对象状态自动映射到关系数据库中的数据上,从而提供透明化的持久化支持,即把一种形式转化为另一种形式. 对象与关系数据库之间是不匹配,我们把这种不匹配称为阻抗失配,主要表现在: 关系数据库首先不支持面向对象技术如继承.多态,如何使关系数据库支持它们: 关系数据库是由表来存放数据,而面向对象使用对象来存放状态:其中表的列称为属性,而对象的属性就是属性,因此需要通过解决这种不匹

开涛spring3(1) - Spring概述

1.1.1  Spring是什么 Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发.应用程序是由一组相互协作的对象组成.而在传统应用程序开发中,一个完整的应用是由一组相 互协作的对象组成.所以开发一个应用除了要开发业务逻辑之外,最多的是关注如何使这些对象协作来完成所需功能,而且要低耦合.高内聚.业务逻辑开发是不可 避免的,那如果有个框架出来帮我们来创建对象及管理这些对象之间的依赖关系.可能有人

开涛spring3(12.2) - 零配置 之 12.2 注解实现Bean依赖注入

12.2  注解实现Bean依赖注入 12.2.1  概述 注解实现Bean配置主要用来进行如依赖注入.生命周期回调方法定义等,不能消除XML文件中的Bean元数据定义,且基于XML配置中的依赖注入的数据将覆盖基于注解配置中的依赖注入的数据. Spring3的基于注解实现Bean依赖注入支持如下三种注解: Spring自带依赖注入注解: Spring自带的一套依赖注入注解: JSR-250注解:Java平台的公共注解,是Java EE 5规范之一,在JDK6中默认包含这些注解,从Spring2.

开涛spring3(9.2) - Spring的事务 之 9.2 数据库事务概述

9.2.1  概述 Spring框架支持事务管理的核心是事务管理器抽象,对于不同的数据访问框架(如Hibernate)通过实现策略接口 PlatformTransactionManager,从而能支持各种数据访问框架的事务管理,PlatformTransactionManager 接口定义如下: public interface PlatformTransactionManager { TransactionStatus getTransaction(TransactionDefinition

开涛spring3(3.1) - DI的配置使用

3.1.1  依赖和依赖注入 传统应用程序设计中所说的依赖一般指“类之间的关系”,那先让我们复习一下类之间的关系: 泛化:表示类与类之间的继承关系.接口与接口之间的继承关系: 实现:表示类对接口的实现: 依赖:当类与类之间有使用关系时就属于依赖关系,不同于关联关系,依赖不具有“拥有关系”,而是一种“相识关系”,只在某个特定地方(比如某个方法体内)才有关系. 关联:表示类与类或类与接口之间的依赖关系,表现为“拥有关系”:具体到代码可以用实例变量来表示: 聚合:属于是关联的特殊情况,体现部分-整体关