iBATIS教程
一.iBATIS官方网站:
http://ibatis.apache.org目前官方发布的.net部分组件:
DataMapper1.6.1[MD5][PGP](ApacheGeneralAvailability)DataAccess1.9.1[MD5][PGP](ApacheGeneralAvailability)SourceRevision513437[MD5][PGP]二.前言:
iBATIS框架有助于帮助开发人员在利用Java或.NET进行应用程序开发时更好的使用数据库。iBATISDataMapper(数据映射)使用XML文件来存储数据库中的存储过程或者SQL语句,因此,可以说iBATISDataMapper就是依赖于对象、XML、SQL。在iBATISDataMapper框架下,既可以使用SQL基本语句,也可以使用存储过程。iBATIS框架的目标就是用20%的编码达到80%的
数据访问功能。
三.iBATISDataMapperVersion1.6.0的改进
(1)解决了带有groupby的Select语句中N+1问题;(2)通过
(3)增加了对字典查询IDictionary
Configure(XmlDocumentdocument),Configure(),Configure(stringresource),
ConfigureAndWatch(ConfigureHandlerconfigureDelegate),
ConfigureAndWatch(stringresource,ConfigureHandlerconfigureDelegate)
(6)允许通过扩展ISqlMapper+,允许使用自定义ISqlMapper;(7)允许用户自定义缓存;
(8)原版本中的QueryForPaginatedList方法不再使用;
四、iBATISDataMapper工作流程
说明:
(1)参数提供——把一个对象或者一个基本类型作为参数,这些参数用于运行SQL语句或存储过程运行时的参数。如果不需要参数,则可以省略。
(2)通过参数名称和在XML文档中定义的SQL语句或存储过程的名字执行数据映射,这个地方就是iBATIS的奥妙所在。iBATIS框架负责产生SQL语句或存储过程,用我们提供的参数设置这些语句的变量值,然后执行语句并返回结果。(3)在update操作语句中,返回受影响的行数。在查询语句中,返回一个对象或者一个对象集。
举例:
下面给出一个执行“insert”lineItem对象命令代码的基本过程:(1)C#
Mapper.Instance().Insert(\
如果数据库中这个对象的表含有主键,则可以获取插入数据的主键值:C#
intmyKey=Mapper.Instance().Insert(\(2)与\相关的XML描述文档: INSERTINTO[LinesItem] (Order_Id,LineItem_LineNum,Item_Id,LineItem_Quantity,LineItem_UnitPrice)VALUES (#Order.Id#,#LineNumber#,#Item.Id#,#Quantity#,#Item.ListPrice#) select@@IDENTITYasvalue (3)如果需要获取多行数据,iBATIS可以返回一个对象或者一个对象集合,每个对象对应数据行中的一行。C# IListproductList=Mapper.Instance().QueryForList(\或者返回一个对象(一行):C# Productproduct=Mapper.Instance().QueryForObject(\asProduct; 五.iBATIS对于工程是不是最好的选择? iBATIS是一种数据映射工具。它的作用就在把数据库查询与对象的属性间建立映射关系。如果将要开发的工程是基于业务对象(包括映射或数据字典对象),那么iBATIS可以算是个好的选择。当应用程序进行分层设计实现时,它更是个好的选择,这样的话,业务层就可以和用户界面层分开。 在上述情况下,Object/RelationalMapping(OR/M)工具也是个好的选择,如NHibernate。但是iBATIS不是一个实体关系映射工具,它仅用于帮助程序人员建立实体和SQL语句或者存储过程间的映射。如果在实体和数据库表之间存在映射关系的话,OR/M是个很好的工具。但是若映射关系是实体和数据库视图间的对应,而不是实体和基本表间的对应,则选择OR/M并不是很合适。如果能够编写出确定的数据库中的数据列和对象之间存在对应关系的SQL语句或者存储过程,则无论数据库中的数据是以哪种形式存储的,iBATIS都可很好的支持。 一般来讲,下述情况下比较适合选择OR/M工具:(1)对数据库有完全控制权;(2)团队中没有数据库管理员; (3)需要把数据库之外的问题域看作一个对象表格;而在下属情况下,比较适合选择iBATIS: (1)对数据库没有完全控制权,或者需要在数据库重构之后能够当作原来的数据库,继续合法访问这个它。(2)团队中有数据库有管理员; (3)数据库用于模拟问题域,应用程序的主要功能是帮助用户适用数据库模型; 六.iBATIS.NET开发指南6.1安装iBATIS 到http://ibatis.apache.org/网站下载所需版本的iBATIS的.NET版本文档。本网站发布的iBATIS的.NET版本分2种,一种是二进制文件,另一种开源的程序工程文件,可以根据所需进行下载。 二进制文件包含如下文件: 其中,扩展DataMapper依赖于Castle.DynamicProxy.dll组件。 6.2添加引用iBATIS组件 根据工程的需要,向项目中添加所需的iBATIS组件的引用。既可以向Windows、Web项目应用程序中添加引用,也可以向类库工程中添加此组件。 IBatisNet.DataMapper.dllIBatisNet.DataAccess.dll(可选的)IBatisNet.Common.dllCastle.DynamicProxy.dll (1)在单独使用映射的情况下,只需要引用IBatisNet.DataMapper.dll; (2)IBatisNet.Common.dll和Castle.DynamicProxy.dll两个文件是在运行是必须的,.NET会自动添加对这两个组件的引用;(3)如果使用DataAccess组件,则还需要添加对IBatisNet.DataAccess.dll的引用;6.3添加XML项 完成了对组件的引用添加之后,必须向应用工程中添加三种类型的XML文档:(1)providers.config——DataMapper使用此文件来确定工程使用的数据库提供者。 (2)SqlMap.xml——一个数据映射文档,里面包含了SQL查询。工程中会包含1~n个数据映射文档,文件名命名如:Account.xml,Product.xml。 (3)SqlMap.config——这是一个DataMapper配置文档,它详细描述了工程中SqlMap.xml文档和providers.config文档的位置。还描述了DataMapper的其它配置项,如caching。工程中的每种数据源公用同一个SqlMap.config文档。 说明: SqlMap.config和providers.config必须放在运行DataMapper时能够找到的地方。根据工程类型的不同,这两个文件的默认存放位置有所不同。 Windows,Library Web 工程相应的/bin/debug目录下 应用程序的根目录下 这两个文件并不是必须放在上表中所示的位置。DataMapper提供了更加灵活方便的方式来确定其位置,后面会有相应的介绍。 6.3在VisualStudio.NET环境中的集成 每一种配置文件(SqlMap.config,mapppingfile,providers.config)都与相应的架构文件相连。通过与架构文件的集成,就可以完成对XML文档格式进行验证,并在编辑这些文件时进行智能内容提示。 为了在.NET环境中正确设置XML文件与架构文件的联系,需要把架构文件SqlMap.xsd,SqlMapConfig.xsd,providers.xsd放置在两个地方(选一种位置即可): (1)VS.NET工程中;(2)VS.NET的安装目录下; 根据.NET版本不同,VS.NET安装目录通常为: C:\\ProgramFiles\\MicrosoftVisualStudio8\\Xml\\SchemasforVS.NET2005 或者 C:\\ProgramFiles\\MicrosoftVisualStudio.NET2003\\Common7\\Packages\\schemas\\xmlforVS.NET2003 或者 C:\\ProgramFiles\\MicrosoftVisualStudio.NET\\Common7\\Packages\\schemas\\xmlforVS.NET2002 进行了XML架构文件配置之后,在.NET环境中就可以在编辑这些XML文档时自动进行内容语法验证和提示。如图所示 6.4配置DataMapper.NET iBATISDataMapper的配置是以命名为SqlMap.config的XML描述文件为中心进行的,该文件提供了数据源的详细内容、数据映射以及其它诸如caching、事务、线程管理属性的内容。程序运行时,会调用iBATIS库的一个类方法来分析SqlMap.config文件,分析完成之后,iBATIS返回一个用于应用程序中DataMapper客户对象。 6.4.1DataMapper客户(DataMapperclients) SqlMapper类是DataMapper框架的核心,它是程序与DataMapper框架的API。通过创建SqlMapper类完成DataMapper客户的创建。每种配置文件对应一种数据库或者数据源。但在一个应用程序中可以使用多个DataMapper客户。通过创建多个配置文件,并在初始化DataMapper客户的时候把配置文件名作为参数传递给框架,就可以完成在一个应用程序中使用多个DataMapper客户。对于多DataMapper客户应用系统的这些配置文件来说,可以使用不同的配置命名,而数据源却是同一个数据库,或者数据源是不同服务器上的不同数据库。那么就可以从一个DataMapper客户中读数据而向另一个DataMapper客户中写数据。下面首先来看一下DataMapper的配置文件。 6.4.2DataMapper配置文件(SqlMap.XML) 下面的XML段是了一个Web系统的SqlMap.XML内容。