IBATIS是一个混合的解决方案.它吸收了这些方案中的优秀思想,并且协调它们.
1.1.2 理解IBATIS的优点
IBATIS是一个混合的解决方案.它吸收了这些方案中的优秀思想,并且协调它们.表1.1列出了IBATIS从以上讨论的各种方案中吸取的思想.
外部化的SQL
从软件开发的上个十年中学到的智慧就是将一个系统设计成不同的互相协调通信的子系统.你想要分离由不同编程角色(比如用户接口设计,应用程序开发,和数据库管理)处理的事务.即使一个人担当了所有这些角色,它能给你一个很好的分层设计,以便你能专注于系统的特定模块.如果你将SQL嵌入到JAVA源代码中,这通常无益于数据库管理员或者与这个数据库相关的.NET开发人员.外部化的SQL将程序源代码和SQL分离,保持了两者的干净.这样做保证了SQL的语言,平台无关性.大多数现代开发语言将SQL表现为string,在连接长SQL语句时提及过.看下下面的简单SQL语句:
SELECT
PRODUCTID,
NAME,
DESCRIPTION,
CATEGORY
FROM PRODUCT
WHERE CATEGORY = ?
当被作为 string 嵌入现代编程语言,比如JAVA,这句文雅的SQL语句就会变成一堆语言特征,而且不易管理的代码:
String s = "SELECT"
+ " PRODUCTID,"
+ " NAME,"
+ " DESCRIPTION,"
+ " CATEGORY"
+ " FROM PRODUCT"
SELECT
PRODUCTID,
NAME,
DESCRIPTION,
CATEGORY
FROM PRODUCT
WHERE CATEGORY = #categoryId#
注意, SQL 在结构和简单性上并没有被改变.最大的区别在于,参数#categoryId#的格式,这个一般是语言相关的细节.IBATIS 使它变得轻便而且可读性更好.
"封装"的 SQL
<select id="categoryById"
parameterClass="string" resultClass="category">
SELECT CATEGORYID, NAME, DESCRIPTION
FROM CATEGORY
WHERE CATEGORYID = #categoryId#
</select>
注意 SQL 周围的 XML.这是对 SQL 的"封装".<select>元素定义了语句的名字,输入参数的类型,输出的结果类型.对一个面向对象软件开发者来说,这更象一个方法标记.
1.2 IBATIS 适合哪里
你可以将箭头认为是"依赖于"或"使用".这种分层思想的灵感来源于 Demeter 规则,"每一层对其他层的了解是有限的:只了解紧靠着的层.