Java EE是一个功能强大的平台,在过去几年中已经被简化和优化,可以说Java EE可以做任何事,那么Spring框架确实可能是一个重大的错报。前面的我们讲了Spring的流行度,现在让我们看看Java EE和Spring的比较,确认一些Java EE能做的事情,并且看看Spring如何在旁使用,或者替代他们中的一些API使得开发更完美。
JDBC 4.1和Spring的JdbcTemplate
Java数据库连接(JDBC)API,它早在1999年,我第一次授课的时候,就已经作为Sun JDK1.0.2课程的辅助材料了,它已经是很多框架的支柱,包括Hibernate和JPA服务规范,MyBatis iBATIS 以及其他很多框架。
编写原始的JDBC查询API的时候有两个期望:
第一是开发人员必须获得一个连接,创建一个语句,然后处理一个结果集。第二是开发人员必须妥善关闭这些连接,并且处理各种异常,以避免出现资源泄漏。
这里有一个典型(Java 7以前)JDBC代码块:
Connection conn = null; Statement statement = null; ResultSet rs = null; try { conn = //let’s assume we ask a connection pool for the connection 让我们假设为这个连接请求一个连接池 statement = conn.prepareStatement(“select a, b from foo f where f.c = ?”); statement.setInt(1, 234); rs = statement.executeQuery(); while (rs.next()) { // process each row(循环处理每一行) } } catch (SqlExceptoin se) { se.printStackTrace(); } finally { try { // this isn’t quite right- you should close each one in a try/catch for safety 这样做不是特别正确,应该在每一个try/catch中安全的关闭 rs.close(); stmt.close(); conn.close(); } catch (Exception e) { … ? } 上面的 |
代码存在如下一些主要的问题:
开发人员必须正确处理异常。finally块很难写好。开发人员必须处理一个受控异常(SqlException),并它作为一个运行时异常重新抛出,或把它扔给堆栈(ick)。
这是许多样板的代码。说了这么多,事实上,我们遗漏了while循环调用每一行,取而代之的是一个整理过的评论。
Spring的方式
Spring团队创建的第一个API是JdbcTemplate API。基于模板方法的设计模式,一个方法同时为流程提供setup和teardown代码,并且提供了一种方法,从而在安全的代码块中插入逻辑来处理流程,这个API简化了几件事情:
开发人员不再需要try / catch异常来处理错误。错误作为运行时异常被扔到堆栈,而不是受控异常。资源在业务逻辑以外分配,所以不可能再出现连接泄漏事件。任何重复使用的代码将调用模板方法本身。
JdbcTemplate中相同的代码可能需要几种形式。
这是最简单的形式:
JdbcTemplate template = new JdbcTemplate(connection); List<MYABC> template.query(“select a, b from foo f where f.c = ?”, 234, new RowMapper { public MyAbc mapRow(ResultSet rs, int rowNum) throws SQLexception { return new MyAbc(rs.getString(1), rs.getString(2)); } } } |
JdbcTemplate的查询方法提供了一个称为RowMapper的API,实现这个接口可以处理每一行。开启和关闭连接,创建和准备语句,甚至是创建并返回一个列表的技术性细节都是由查询方法来处理的。
我们甚至有空间显示完整的方法,但是我们没有那么多teardown代码。
本文只是Spring学习的第一部分,精彩内容还将继续,敬请关注。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
Spring针对Java 8升级
Java 8刚刚在几周前发布。后来Spring Framework项目负责人发表了题为《企业项目中的Java 8》的文章。文中,指出那些著名的Java EE应用服务器如何不允许轻松升级。
-
你应该远离的六个Java特性
近日,Tarnovski撰文谈到了普通开发者应该尽量避免使用的6个Java特性,这些特性常见于各种框架或库当中,使用这些特性也许会给你所开发的应用带来灾难。
-
从测试数据来看Node.js和Java EE的性能区别
本文是通过从CouchDB上读取JSON数据来比较Node.js和Java EE之间的性能的。究竟谁的性能更好些?
-
Spring 烂!差!
有些人可能对Spring的第一印象不太好,它真的很烂,很差吗,也许这只是你的一种偏见,它也有是自己的优点的。