本书从对iBATIS的高级介绍开始。接下来的两章将讨论iBATIS的理念,正是这种理念的不同使得iBATIS有别于其他的持久化方案。对Java来说,有许多种可选的持久化方案,到底在何时使用哪一种方案,可能是一个非常值得探讨的问题。通过阅读本部分的内容,你应该能够明白iBATIS背后的理念和它的价值,当然你也就知道应该在何时何地使用它了。
第一章iBATIS的理念
iBATIS并不试图隐藏SQL或者避免使用SQL。相反,正是iBATIS这个持久层框架广泛使用了SQL,它使得SQL更容易使用、更容易集成到现代的面向对象软件中。混合型解决方案在IT领域同样被证明是非常有效的。iBATIS就是这样一个混合型的持久层解决方案。在过去的时间中,我们已经开发了大量的方法来使用应用程序能够执行SQL,以便操纵其背后的数据库。iBATIS汲取了这些方法中的优秀思想,成为一个独特的持久层解决方案。让我们快速浏览一下这些方法。
1.SQL(省略)
2.老式存储过程(省略)
3.现代存储过程(省略)
4.内联SQL(省略)
5.动态SQL。代码中的字符串拼接操作使得SQL的可读性大大降低,给维护和使用都带来了更多的困难。
6.O/RM。它并非适用于所有的场景。O/RM工具是基于一些假设和规则的。其中最普遍的一个假设就是数据库被恰当地规范化了。哪些最大的最有价值的数据库网没有被很好地规范化。
现在讨论混合型解决方案
理解iBATIS的优势
iBATIS是一个混合型解决方案。它汲取了所有这些解决方案中最有价值的思想并将它们融会贯通。
方案 | 相同的优点 | 解决的问题 |
存储过程 | iBATIS对SQL进行了封装和外部化,使SQL从你的应用程序代码中分离出来。iBATIS具有与存储过程相似的API,但iBATIS的这些API是面向对象的。iBATIS也完全支持对存储过程的直接调用 | 业务逻辑从数据库中分离出来,应用程序更容易部署与测试,也具有更好的可移植性 |
内联SQL | iBATIS允许SQL以其最自然的方式书写。没有字符串拼接,没有参数“设置”,没有结果“获取” | iBATIS对应用程序代码没有任何影响。不需要任何预编译器,并且你能够完全访问SQl的所有特性,而不只是一个子集 |
动态SQL | iBATIS提供了若干特性以支持基于参数的动态构建查询。不需要“查询构建工具”这样的API | iBATIS不要求SQL被写成一堆字符串的拼接,中间还夹杂着应用程序的代码 |
O/RM | iBATIS支持许多与O/RM工具一样的特性,例如延迟加载、连接抓取、高速缓存、运行时代码生成以及继承 | iBATIS可用于任意数据模型与任意对象模型的组合。它对这两者中的任何一个的设计没有任何约束和要求 |
接下来将讨论iBATIS持久层所具有的两个最重要的特性:外部化SQl和封装SQL。这两个概念展现了iBATIS框架的核心价值,并启用了这个框架所能实现的许多高级特性。