日期:2014-05-16 浏览次数:20798 次
?????? 传统应用程序开发中,进行JDBC编程是相当痛苦的,如下所示: ? ? ?????? 以上代码片段具有冗长、重复、容易忘记某一步骤从而导致出错、显示控制事务、显示处理受检查异常等等。 ?????? 有朋友可能重构出自己的一套JDBC模板,从而能简化日常开发,但自己开发的JDBC模板不够通用,而且对于每一套JDBC模板实现都差不多,从而导致开发人员必须掌握每一套模板。 ?????? 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的工作模式: Spring JDBC还提供了一些强大的工具类,如DataSourceUtils来在必要的时候手工获取数据库连接等。 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模板类实现。 ? ? 原创内容,转载请注明 出处【http://sishuok.com/forum/blogPost/list/0/2489.html】7.1? 概述
7.1.1? 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);
}
}
7.1.2? Spring对JDBC的支持
7.1.4?? ?Spring的JDBC架构