传统应用程序开发中,进行JDBC编程是至关痛苦的,以下所示:java
//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); } }
以上代码片断具备冗长、重复、容易忘记某一步骤从而致使出错、显示控制事务、显示处理受检查异常等等。spring
有朋友可能重构出本身的一套JDBC模板,从而能简化平常开发,但本身开发的JDBC模板不够通用,并且对于每一套JDBC模板实现都差很少,从而致使开发人员必须掌握每一套模板。sql
Spring JDBC提供了一套JDBC抽象框架,用于简化JDBC开发,并且若是各个公司都使用该抽象框架,开发人员首先减小了学习成本,直接上手开发,如图7-1所示。数据库
图7-1 Spring JDBC与传统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等类。这些类的实现一旦创建便可重用而且是线程安全的。app
SimpleJdbc方式:Spring JDBC框架还提供了SimpleJdbc方式来简化JDBC编程,SimpleJdbcInsert 、 SimpleJdbcCall用来简化数据库表插入、存储过程或函数访问。框架
Spring JDBC还提供了一些强大的工具类,如DataSourceUtils来在必要的时候手工获取数据库链接等。
Spring JDBC抽象框架由四部分组成:datasource、support、core、object。如图7-2所示。
support包:提供将JDBC异常转换为DAO非检查异常转换类、一些工具类如JdbcUtils等。
datasource包:提供简化访问JDBC 数据源(javax.sql.DataSource实现)工具类,并提供了一些DataSource简单实现类从而能使从这些DataSource获取的链接能自动获得Spring管理事务支持。
core包:提供JDBC模板类实现及可变部分的回调接口,还提供SimpleJdbcInsert等简单辅助类。
object包:提供关系数据库的对象表示形式,如MappingSqlQuery、SqlUpdate、SqlCall、SqlFunction、StoredProcedure等类,该包是基于core包JDBC模板类实现。