1、什么是iBATIS?
官方的说明:
To use the iBATIS Data Mapper, you rely on your own objects, XML, and SQL. There is little to learn that you don't already know. With the iBATIS Data Mapper, you have the full power of both SQL and stored procedures at your fingertips.
简单来说,(.net下的)iBATIS是一个较为灵活方便的ORM框架。它提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。
iBATIS的缺点就是框架还比较简陋,功能尚有缺失。虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。
3、组成部分说明
iBATIS.net这个框架将让你能够更好的在dotnet应用中设计和实现实体层。这个框架有两个主要的组成部分,一个是SQL Maps,另一个是Data Access Objects。
<1>、SQL Maps
a、优点
通过使用Sql Maps你可以显著的节约数据库操作的代码量。SQL Maps使用一个简单的XML文件来实现从实体到SQL statements的映射。跟其他的框架或者对象映射工具相比,SQL Maps最大的优势是简单。它需要学习的东西很少,在连接表或复杂查询时也不需要复杂的scheme,使用SQL Maps,你可以自由的使用SQL语句。 SQL Map API允许程序员很简单的把dotnet对象映射到PreparedStatement参数或者ResultMap。SQL Maps的机制很简单,提供一个框架,来实现用20%的代码来实现80% ADO.NET的功能。
可以这样说,Sql Maps是整个iBATIS.net的核心价值所在。
b、工作原理
SQL Maps提供一个简单的框架,通过ML描述来映射dotnet实体类,MAP implementations甚至原始类型的包装(String,Integer等)到Ado.net PreparedStatement。想法很简单,基本的步骤如下:
(1) 提供一个参数,无论是对象还是一个Nativel类型。参数将被用于设置sql语句或存储过程的运行时的值;
(2) 通过传送参数和在你的xml描述中的声明名字或者存储过程来执行映射。这一步将是非常神奇的步骤。框架将会准备sql声明或者存储过程,用你的参数设置运行时数据值,执行sql语句或者存储过程,返回结果。
(3) 在更新的时候,更新的行数将会被返回。在查询的时候,返回的将是一个对象或者对象的集合。比如像参数,结果对象,或者对象的集合,还可以是一个plan-old对象或者native类型。
<2>、Data Access Objects (DAO)
(1)、Data Access Objects(DAO)允许你创建简单的组件,提供对数据的访问,而无需将实现的详细说明展示给应用程序的其余部分。使用 DAO 可以动态地配置应用程序,从而使用不同的持久性机制。如果有一个涉及许多不同的数据库和持久性方法的复杂程序,那么 DAO 可以帮助你创建一个用于你将使用的其他应用程序的持久性 API。
(2)、通过允许将动态的、可插入的 DAO 组件很容易地换入换出,可以使用 iBATIS Data Access Objects API 帮助隐藏持久性层实现的细节,不让其他应用程序知道。例如,您可以使用两个特殊的 DAO,一个使用 iBATIS SQL Maps 框架将对象持久存储到数据库中,另一个则使用NHibernate 框架。
类似的一个例子将是一个为另一个 DAO 提供缓存服务的 DAO。根据使用情况(例如,有限的数据库性能与有限的内存相对),您可以插入这个缓存 DAO,或者可以使用标准的非缓存 DAO。这些例子展示了 DAO 模式提供的一些便利;然而,DAO 提供的安全性更为重要。DAO 模式可以保护应用程序,使之不必与特定持久性方法捆绑在一起。在当前解决方案不适合(甚至不可用)的情况下,可以创建新的 DAO 实现来支持新的解决方案,而不必修改其他应用层中的任何代码。
(3)、总结:当我们开发灵活的dotnet应用时,有一个好主意就是通过一个通用API层把实体操作的细节封装起来。Data Access Objects允许你通过一个简单接口的来操作数据,从而隐藏了实现的细节。使用DAO,你可以动态配置你的应用程序来访问不同的实体存储机制。如果你有一个复杂的应用需要用到几个不同的数据库,DAO可以让你建立一个一致的API,让系统的其他部分来调用。
今天这篇是开篇,今后争取挤出时间多学习多写实例讲解。