您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > iBATIS学习笔记
一、iBATIS学习笔记开篇因工作需要,从今天开始,计划一个月内学懂学透.net下的iBATIS.关于iBATIS,网上有很多介绍(官方网站),我会把学习(.net下的)iBATIS的笔记整理成一个系列来写,希望对有相同需求的朋友有帮助。1、什么是iBATIS?官方的说明:TheiBATISDataMapperframeworkmakesiteasiertouseadatabasewithJavaand.NETapplications.iBATIScouplesobjectswithstoredproceduresorSQLstatementsusingaXMLdescriptor.SimplicityisthebiggestadvantageoftheiBATISDataMapperoverobjectrelationalmappingtools.TousetheiBATISDataMapper,yourelyonyourownobjects,XML,andSQL.Thereislittletolearnthatyoudon'talreadyknow.WiththeiBATISDataMapper,youhavethefullpowerofbothSQLandstoredproceduresatyourfingertips.2、优缺点简单来说,(.net下的)iBATIS是一个较为灵活方便的ORM框架。它提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。iBATIS的缺点就是框架还比较简陋,功能尚有缺失。虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。3、组成部分说明iBATIS.net这个框架将让你能够更好的在dotnet应用中设计和实现实体层。这个框架有两个主要的组成部分,一个是SQLMaps,另一个是DataAccessObjects。1、SQLMapsa、优点通过使用SqlMaps你可以显著的节约数据库操作的代码量。SQLMaps使用一个简单的XML文件来实现从实体到SQLstatements的映射。跟其他的框架或者对象映射工具相比,SQLMaps最大的优势是简单。它需要学习的东西很少,在连接表或复杂查询时也不需要复杂的scheme,使用SQLMaps,你可以自由的使用SQL语句。SQLMapAPI允许程序员很简单的把dotnet对象映射到PreparedStatement参数或者ResultMap。SQLMaps的机制很简单,提供一个框架,来实现用20%的代码来实现80%ADO.NET的功能。可以这样说,SqlMaps是整个iBATIS.net的核心价值所在。b、工作原理SQLMaps提供一个简单的框架,通过ML描述来映射dotnet实体类,MAPimplementations甚至原始类型的包装(String,Integer等)到Ado.netPreparedStatement。想法很简单,基本的步骤如下:(1)提供一个参数,无论是对象还是一个Nativel类型。参数将被用于设置sql语句或存储过程的运行时的值;(2)通过传送参数和在你的xml描述中的声明名字或者存储过程来执行映射。这一步将是非常神奇的步骤。框架将会准备sql声明或者存储过程,用你的参数设置运行时数据值,执行sql语句或者存储过程,返回结果。(3)在更新的时候,更新的行数将会被返回。在查询的时候,返回的将是一个对象或者对象的集合。比如像参数,结果对象,或者对象的集合,还可以是一个plan-old对象或者native类型。2、DataAccessObjects(DAO)(1)、DataAccessObjects(DAO)允许你创建简单的组件,提供对数据的访问,而无需将实现的详细说明展示给应用程序的其余部分。使用DAO可以动态地配置应用程序,从而使用不同的持久性机制。如果有一个涉及许多不同的数据库和持久性方法的复杂程序,那么DAO可以帮助你创建一个用于你将使用的其他应用程序的持久性API。(2)、通过允许将动态的、可插入的DAO组件很容易地换入换出,可以使用iBATISDataAccessObjectsAPI帮助隐藏持久性层实现的细节,不让其他应用程序知道。例如,您可以使用两个特殊的DAO,一个使用iBATISSQLMaps框架将对象持久存储到数据库中,另一个则使用NHibernate框架。类似的一个例子将是一个为另一个DAO提供缓存服务的DAO。根据使用情况(例如,有限的数据库性能与有限的内存相对),您可以插入这个缓存DAO,或者可以使用标准的非缓存DAO。这些例子展示了DAO模式提供的一些便利;然而,DAO提供的安全性更为重要。DAO模式可以保护应用程序,使之不必与特定持久性方法捆绑在一起。在当前解决方案不适合(甚至不可用)的情况下,可以创建新的DAO实现来支持新的解决方案,而不必修改其他应用层中的任何代码。(3)、总结:当我们开发灵活的dotnet应用时,有一个好主意就是通过一个通用API层把实体操作的细节封装起来。DataAccessObjects允许你通过一个简单接口的来操作数据,从而隐藏了实现的细节。使用DAO,你可以动态配置你的应用程序来访问不同的实体存储机制。如果你有一个复杂的应用需要用到几个不同的数据库,DAO可以让你建立一个一致的API,让系统的其他部分来调用。今天这篇是开篇,今后争取挤出时间多学习多写实例讲解。二、iBATIS.net开发的第一个web实例这是我用iBATIS.net开发的第一个web实例,参考网上资料自己改进实现的。其实,除了配置和写sql之外,调用iBATIS.net对于开发人员是非常省事的。下面我会从配置和使用过程中遇到的问题讲解我的使用心得。1、如何使用iBATIS.net(1)、新建一个解决方案叫IBatisNetDemo,里面包含两个工程,一个是IBatisWeb,你可以把它理解为三层中的表现层;还有一个工程叫IBatisNetDemo,它主要是引用iBatis.net的相关类库实现业务逻辑的,所以你也可以把它当做业务逻辑层来对待。至于数据层在哪里?读者可能已经想到,iBatis.net已经帮我们封装好了数据处理底层的东东,所以iBATIS.net的几个相关类库我们就完全可以理解为数据层。这样,一个经典三层架构就搭建好了。(2)、IBatisNetDemo工程下,我们引用了IBatisNet.Common和IBatisNet.DataMapper两个类库(关于公共类库,放在一个公共文件夹Sharelibs下,文章最下面我会给出Demo下载链接),接着按照一般步骤写配置文件和实现代码(我会在“注意点”里详细讲解这个过程)。(3)IBatisWeb工程是一个web项目,它引入了IBatisNetDemo工程。在web.config文件中,我们配置了日志管理相关的东东,所以还需要引入其他类库(可以查看web工程下bin文件夹下的文件)。其中log.txt文件你可以查看你自己机器上iBatis.net工作情况,对于维护和调试是有参考意义的。在页面(Default.aspx)中,你可以直接调用业务逻辑中的增删改查等操作。下面是第一次加载网页的运行结果:2、业务逻辑层的一些注意点IBatisNetDemo工程是我们三层里的业务逻辑层,这里我们在微软的测试数据库Northwind中新建一个表Person来做一个业务逻辑测试。在引用了IBatisNet.Common和IBatisNet.DataMapper两个类库后,我们按部就班地要写配置和业务实现代码:(1)、新建表Person工程中添加Script文件夹,Person.sql如下:USE[Northwind]GO/******Object:Table[dbo].[Person]ScriptDate:07/25/200920:29:24******/SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOCREATETABLE[dbo].[Person]([PER_ID][int]IDENTITY(1,1)NOTNULL,[PER_FIRST_NAME][nvarchar](40)COLLATEChinese_PRC_CI_ASNOTNULL,[PER_Last_NAME][nvarchar](40)COLLATEChinese_PRC_CI_ASNOTNULL,[PER_BIRTH_DATE][datetime]NULL,[PER_WEIGHT_KG][float]NULL,[PER_HEIGHT_M][float]NULL,CONSTRAINT[PK_Person]PRIMARYKEYCLUSTERED([PER_ID]ASC)ON[PRIMARY])ON[PRIMARY](2)、新添Domain文件夹,添加一个实体类Person.cs(读者可参考demo);(3)定义实体对应的xml文件:Person.xml(新添Map文件夹,在Map下添加SqlClient文件夹);(4)可用的实体业务操作新添Service文件夹,建BaseService.cs和PersonService.cs文件。BaseService初始化一个IBatis.Net下的SqlMapper对象;PersonService继承自BaseService,用SqlMapper对象实例实现增删改查等业务。(5)三个.config文件说明a、providers.config这个直接拷贝到根目录,该文件定义各种数据库的驱动,包括SqlServer,Oracle,MySQL,PostgreSQL,DB2andOLEDB,ODBC等;b、database.config?xmlversion=1.0encoding=utf-8?settings!--Userapplicationandconfiguredpropertysettingsgohere.--!--Toruntests,createafilenamedDataBase.configwithyourownvaluefordatasource.(don'tincludeditinthesolutionanddon'tcommititinSVN)--addkey=useridvalue=sa/addkey=passwordvalue=jeffwong/addkey=databasevalue=Northwind/addkey=datasourcevalue=.\sqlexpress/addkey=selectKeyvalue=select@@IDENTITYasvalue/addkey=directoryvalue=Maps/addkey=useStatementNamespacesvalue=false//settings毫无疑问,是数据库相关配置文件,笔者的数据库还是sql2005Express版,读者可根据自己数据库的实际情况修改。c、sqlmap.config?xmlversion=1.0encoding=utf-8?sqlMapConfigxmlns=:xsi=!--Rem:IfusedviaaDataAccesscontext,propertiestagwillbeignoredpropertiesresource==database.config,IBatisNetDemo/settingssettingus
本文标题:iBATIS学习笔记
链接地址:https://www.777doc.com/doc-4893068 .html