iBATIS特性有哪些呢?正如你所知道的,可以在任何系统中使用iBATIS。像iBATIS这样一个框架能够使你的应用从架构级别上开始受益是什么原因呢?来开始我们的介绍吧。
iBATIS特性1简单性
iBATIS被广泛认为是当今可用的最简单的持久化框架之一。简单性的理念根植于iBATIS开发团队,它在iBATIS的所有开发目标中居于首位。这种简单性的取得是因为iBATIS直接构建于JDBC和SQL之上。iBATIS对于Java开发者来说非常简单,因为它除了不用编写那么多代码外与JDBC的工作机制非常相像。几乎你知道的关于JDBC的一切都对iBATIS同样适用。你几乎可以这样认为,iBATIS就是以XML的形式来描述的JDBC代码。有人说,iBATIS拥有许多JDBC所没有的架构级的优点,这些优点我们随后就将讨论。iBATIS对于数据库管理员以及SQL程序员来说也非常容易理解。iBATIS配置文件几乎人人都能读懂,只要他有SQL编程的经验。
iBATIS特性2生产效率
任何一个优秀的框架,其目的都是使得框架的使用者能够获得更高的生产效率。一般情况下,框架负责处理公共的任务,减少编写那些像样板一样的重复代码,以及解决复杂的架构级的问题。iBATIS在给开发人员带来更高的开发效率方面做得非常成功。在意大利的Java用户组(Java Users Group)所做的一个案例调查中(参见www.jugsardegna.org/vqwiki/jsp/Wiki?IBatisCaseStudy),Fabrizio Gianneschi发现iBATIS减少了持久层大约62%的代码量。所以能减少如此之多的代码量,究其原因是开发者再不需要编写繁琐的JDBC代码了。SQL语句仍然是硬编码的,不过就像你在本章之前所看到的,SQL不是问题——问题在于JDBC API,对于ADO.NET而言也是如此。
iBATIS特性3性能
性能这个话题无疑会引起框架开发者、框架使用者以及商业软件开发商之间的一场激烈争论。事实是,从一个较低的级别来看这个问题,无疑所有的框架都会带来一定的性能损失。一般来说,如果你比较硬编码的JDBC代码和iBATIS代码,做一个1,000,000次的for循环,你会发现JDBC在性能上的确有一些优势。幸运的是,在现代应用开发中,以上这样的for循环带来的性能损失并不重要。真正重要的是,你如何从数据库中获取数据,何时获取,获取的频率又是多少。例如,分页查询之所以能大大提高应用的性能就在于,它不会将可能成千上万条的记录从数据库中一次取出。同样地,使用像懒加载这样的特性可以避免加载那些在当前情况下并不需要的数据。另一方面,如果你确定需要加载一份复杂的对象图,涉及到来自多个表的大量数据,如果能仅用一条SQL语句就完成所有对象的加载显然可以大大提高效率,iBATIS支持使用这样的SQL语句。iBATIS支持许多性能优化措施,我们将在本章之后的章节中详细讨论。就目前而言,最重要的是要知道iBATIS总是能通过一种简单的方式来配置和使用,其性能与JDBC相当,甚至更好。另一个需要重点考虑的问题就是,并不是所有的JDBC代码都是编写良好的。JDBC API非常复杂,编写正确的代码需要非常小心。不幸的是,大量的JDBC代码都编写得相当糟糕,因此从较低层次上看甚至还没有iBATIS工作得好。
iBATIS特性4关注点分离
在典型的JDBC代码中,在应用的各个层中都能找到与数据库相关(例如获取连接、遍历结果集)的代码,这并不稀奇。相信大家都见过甚至开发过这样糟糕的应用——所有的逻辑都在一个JSP页面中完成,连接数据库、执行SQL语句,遍历结果集,当然还有散落其间的HTML代码。这样的代码简直是一个噩梦。在第一章中我们已经讨论了对应用分层的重要性。我们已经看到了如何从一个较高的角度对应用分层,以及持久层内部又是如何进一步分层的。iBATIS通过帮助管理所有这些持久化相关的资源来支持分层,这些资源包括数据库连接(database connection)、prepared statement以及结果集(result set)。iBATIS提供了一组数据库无关的接口以及API,使得应用的其它部分能够通过使用这组接口和API保持与数据库相关资源的独立性。使用iBATIS,你的代码总是在直接与严格的对象打交道,再也不用管那些随意的结果集了。iBATIS实际上使得你难以违背对应用分层这样的最佳实践。
iBATIS特性5明确分工
一些数据库管理员是如此热爱他们的数据库,以至于不愿意让任何其他人来为数据库编写SQL。而有一些人又是如此擅长编写SQL,以至于其他人都想让他们来做这项工作。无论是什么原因,在你的开发团队中实现人尽其才总是有利的。如果你的团队中有人尤其擅长于编写SQL,但是对于Java或C#却不那么在行,那么就可以让他们专门编写SQL。iBATIS使得这种分工成为可能。因为在iBATIS中,SQL语句在很大程度上同应用的源代码是分离的,SQL程序员可以按照SQL原本的方式来编写它,而不必担心有关SQL字符串连接的问题。即使由相同的开发者来编写Java代码和SQL,在数据库性能调整(performance tune)的过程中也会有一个来自DBA的常见请求,即“显示出SQL”。用JDBC来完成此事并不容易,因为SQL隐藏得很深,是连接一堆分散的字符串得到的,甚至还可能是在递归语句和条件语句中动态地创建的。如果使用对象关系映射,情况就更加复杂了,因为你通常必须运行应用然后才能log出这些SQL语句,即使你找到了它们,你也根本不能改变它们。iBATIS则提供了充分的自由,使得任何人都可以开发、观察并且修改在数据库中执行的SQL语句。
iBATIS特性6可移植性
iBATIS是可移植的。由于它相对简单的设计,它几乎可以用任何一种语言在任何一个平台上实现。书写本书时,iBATIS支持3种最受欢迎的开发平台:Java、Ruby和微软.NET的C#。
当前,配置文件并不完全跨平台兼容,但是我们正在计划使它们更加兼容。重要的是,概念和方法都是可移植的。这就使你能够保证你所有的应用在设计上是一致的。和其他框架相比,iBATIS可以处理更多语言以及更多类型的应用,而无需考虑应用设计的不同。如果应用的一致性对于你来说很重要的话,使用iBATIS就可以很好地帮你达到一致性。
iBATIS特性7开源和诚实
开始时我们说本节有“自吹自擂”之嫌。事实上,iBATIS是免费的开源软件。无论你是否使用它,我们都不会因此而获得哪怕是一分钱的利益。你已经买了本书,所以我们已经获得了我们该得的利益。开源软件的最大的优点之一就是诚实。我们没有任何理由对你撒谎。因此下面我们将要做的事在商业软件文档中就是非常罕见的:我们将要讨论一些你可能不应该使用iBATIS的情况,并且提出一些合适的替代方案。
iBATIS特性就向你介绍到这里,希望通过这样的讲解使你更加清楚的认识iBATIS。
【编辑推荐】