iBATIS的安装和配置.docx
- 文档编号:30509296
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:20
- 大小:61.05KB
iBATIS的安装和配置.docx
《iBATIS的安装和配置.docx》由会员分享,可在线阅读,更多相关《iBATIS的安装和配置.docx(20页珍藏版)》请在冰豆网上搜索。
iBATIS的安装和配置
译注:
本章讲解的是iBATIS的安装和配置,原书使用的是Java版本,与.NET版本的安装、配置过程不尽相同,因此这里直接就.NET版本进行说明。
主要参考的是iBATIS官方的DataMapperGuide文档,本章的配置主要针对DataMapper,DataAccess的配置将出现在第10章。
iBATIS的安装过程快速而简单。
它是一个类库,而不是应用程序,所以实际上并不需要安装,但要在应用程序中使用它还是要经过几个步骤。
如果您熟悉C#和ADO.NET,那么可能需要好好阅读本章为下面的一两章做好准备。
首先,我们提供了安装和配置过程的概览,然后是该过程的详细说明。
要获取iBATIS,您有两种选择。
可以下载二进制发行包,然后解压缩到一个目录中;也可以从Subversion资源库中获取一份源代码副本,手动生成它。
不管采用哪种方式,最终得到的是相同的一组文件。
在得到iBATIS发行包之后,只要将需要的dll文件添加到应用程序引用中即可。
3.1获取iBATIS发行包
3.1.1二进制发行包
这是最快速、简单的方式。
iBATIS已经预先生成好了,您只需要下载,解压缩,然后开始使用。
注意:
iBATIS的二进制发行包可以在http:
//ibatis.apache.org/dotnetdownloads.cgi下载(这里可以下载到dll文件,源代码,实例和文档)。
3.1.2由源代码生成
如果您有兴趣增强框架,修复bug,或者只是想通过亲自编译来了解您所得到的内容,那就可以从Subversion资源库获取一份副本,由源代码生成。
第12章中我们将深入了解扩展iBATIS框架的细节,因此本节内容会比较简单,不过这些也足够您开始使用了。
注意:
这里提到的Subversion(SVN)资源库是所有新的Apache项目使用的版本控制系统。
Subversion是CVS的替代品。
SVN的目的在于提供一个环境,使得在框架发生变化时,不用担心丢失源代码(因为每个开发人员都有一份副本,同时服务器上也存有多份拷贝)。
如果您希望更多地了解Subversion,可以访问它的主页http:
//subversion.tigris.org/。
iBATIS的Subversion资源库地址为:
http:
//svn.apache.org/repos/asf/ibatis/trunk/。
3.2发行包的内容
如果您获取的是源代码,那么会得到一个VS解决方案和几个C#项目。
在source文件夹下有8个文件夹,构成了iBATIS.NET发行包。
它们是:
FolderName
Description
External-Bin
iBATIS项目所需的依赖项程序集。
IBatisNet.Common
该程序集包含了DataAccess和DataMapper所共用的类。
IBatisNet.Common.Logging.Log4Net
Log4Net工厂适配器类。
IBatisNet.Common.Test
IBatisNet.Common的测试项目,可用于NUnit。
IBatisNet.DataAccess
DataAccessObjects框架。
IBatisNet.DataAccess.Extensions
包含一个C#项目,用于对DataAccess框架的扩展,如对NHibernate的支持。
IBatisNet.DataAccess.Test
DataAccess框架的测试项目,可用于NUnit。
IBatisNet.DataMapper
DataMapper框架。
iBatisNet.DataMapper.Test
DataMapper的测试项目,可用于NUnit。
您可以加载IBatisNet.2005.sln,生成所需的程序集。
解决方案中有7个项目,应当能够顺利通过编译。
我们需要的程序集位于\IBatisNet.DataMapper\bin\Debug下。
创建的程序集是:
∙IBatisNet.Common.dll
∙IBatisNet.DataMapper.dll
DataMapper有一个外部依赖项:
∙Castle.DynamicProxy.dll(用于创建代理)
该dll在External-Bin文件夹中。
3.3依赖项(略)
3.4将iBATIS添加到应用程序
切换到您自己的应用程序,打开要使用DataMapper的项目。
取决于解决方案的组织方式,项目有可能是Windows或Web应用程序,也可能是类库项目。
这样可能需要项目添加一到两个引用:
∙iBatisNet.DataMapper.dll
∙iBatisNet.DataAccess.dll(可选的)
∙iBatisNet.Common.dll(隐含引用)
∙Castle.DynamicProxy.dll(隐含引用)
如果您使用的Mapper单例(singleton),那么唯一需要引用的是DataMapper程序集。
IBatisNet.Common和Castle.DynamicProxy在运行时是需要的,但VS.NET会帮您解析这些依赖关系。
如果使用DataAccessObjects框架,那么还需要添加对DataAccess的引用。
如果您已经按前面说过的方式生成了iBatisNet,那么需要的三个程序集(IBatisNet.DataMapper.dll,IBatisNet.Common.dll,Castle.DynamicProxy.dll)都在DataMapper项目的bin\Debug目录下。
3.4.1添加XML文件项
在添加了对程序集的引用后,下一步是向项目(可能是Windows,Web应用程序,类库或测试项目)中添加三种类型的XML文件。
这些文件是:
∙providers.config–DataMapper在该文件中查找您选择的数据库Provider的定义。
∙SqlMap.xml–包含了SQL查询的映射文件。
您的项目中会包换一个或多个这种文件,其名称是自定义的,如Account.xml或Product.xml。
∙SqlMap.config–DataMapper配置文件,用于指定SqlMap.xml和providers.config文件的位置。
同时还定义了其它的DataMapper配置选项,如缓存。
我们需要为项目中的每个数据源编写一个SqlMap.config文件。
不难理解,SqlMap.config和providers.config文件应放在DataMapper运行时可以找到的地方。
这两个文件的默认位置取决于项目的类型,如下表所示:
Windows应用程序,类库,测试项目(使用NUnit或其它等价工具)
二进制文件夹(如/bin/debug),.dll和app.config所在目录
Web应用程序
在程序根目录,即web.config所在处
3.4.2与VS.NET集成
每一个配置文件(SqlMap.config,SQL映射文件,providers.config)都与一个XMLSchema文件关联。
这种关联的好处在于,可以对文档进行验证(在运行时完成),使用编辑器的特性如智能感知/内容自动完成。
要在VS.NET的XML编辑器中的Schema和我们的配置文件之间建立关联,应该将Schema文件(SqlMap.xsd,SqlMapConfig.xsd,providers.xsd)添加到VS.NET项目或者VS.NET安装目录。
显然第二种选择会让我们一劳永逸。
VS.NET安装目录可能是:
C:
\ProgramFiles\MicrosoftVisualStudio8\Xml\Schemas(VS.NET2005)
或
C:
\ProgramFiles\MicrosoftVisualStudio.NET2003\Common7\Packages\schemas\xml(VS.NET2003)
或
C:
\ProgramFiles\MicrosoftVisualStudio.NET\Common7\Packages\schemas\xml(VS.NET2002)。
将Schema文件注册到VS.NET后,我们就可以在VS.NET中享用智能感知和配置文档验证了。
3.5iBATIS和ADO.NET
对ADO.NET的深入讲解已经超出了本书的范围,但我们将从一个较高层次进行分析,以为本书的其它部分提供一个基础。
微软的ADO.NET的API是.NET中数据库连接的标准。
ADO.NET定义了一组接口,数据库提供商需要为其数据库产品提供接口的实现(Provider),否则,开发人员无法使用,人们认为提供商的封闭是应该避免的反模式(anti-pattern)行为。
3.5.1释放ADO.NET资源
在使用ADO.NET时,容易发生获取资源,然后却忘记了正确地释放资源的问题。
垃圾回收进程最终可能会释放它们,但这需要时间,而且没有保证。
如果这些资源没有释放掉,应用程序最终可能会耗尽资源,进而崩溃。
iBATIS框架帮助开发人员管理这些资源,从而减轻了开发人员的负担。
开发人员不再需要担心资源的分配和释放,而是关注于他们需要的数据。
但是,如果愿意,开发人员仍然可以手动地管理这些资源。
3.5.2SQL注入
另一个常见的问题(在Web应用程序中更易出现)是SQL注入,它使得应用程序不以开发人员所期望的方式执行SQL。
如果程序使用字符串拼接来构造SQL语句,但没有正确地过滤参数,恶意的用户传入的参数会改变查询的内容。
考虑类似于select*fromproductwhereid=5这样的例子。
如果这里的5直接来自用户的输入,然后同select*fromproductwhereid=拼接,那么用户可以输入5or1=1,从而改变了SQL语句的真实用意。
如果用户输入的是5;deletefromorders,那就更糟了,SQL语句会乖乖地查询一条记录,然后将orders清空。
灵活性也带来了风险,因此如果不正确地使用了iBATIS,我们的程序仍有可能会受到SQL注入的攻击。
但是,iBATIS通过使用Parameter提高了程序受到此类攻击的难度(Parameter)。
只有那些使用显式的SQL字符串置换语法的语句是有风险的。
考虑下面这个例子,该语句接受动态的表名和列名:
SELECT*FROM$TABLE_NAME$WHERE$COLUMN_NAME$=#VALUE#
这种语句在某些情况下很灵活,也很有用,却易受到SQL注入的攻击,因此要慎重使用。
这不是iBATIS的问题,这样的语句无论如何执行总会面临这种问题。
因此对于那些动态构造的语句,如果会受用户输入的影响,一定要对用户的输入进行验证。
3.5.3降低复杂性
ADO.NET非常强大,同时也是层次很低的API。
为了帮助您更好地理解iBATIS有哪些好处,我们做个比较。
(请参看2.2节工作原理中的例子)
3.6iBATIS的配置(continued)
在第2章中,我们简要地浏览了iBATIS的配置(那个例子实在简单,如果您没有阅读那一节内容也不必担心)。
在本节中,我们将创建SQLMap配置文件。
这个文件是iBATIS的核心,如图3.1所示。
图3.1描述了iBATIS的配置,其中SqlMapConfig文件是一切的核心。
3.6.1SQLMap配置文件
由图3.1可以清楚地看到,SQLMap配置文件(SqlMap.config)iBATIS配置的核心。
从数据库连接到使用的SqlMap文件的相关配置都由此文件提供。
注意:
上面说的核心配置文件名称通常为SqlMap.config。
尽管它也可以使用其它名称,我们在这里还是遵循约定。
下面的代码清单演示了一个示例配置文件,我们将在后面的章节中进行讨论。
xml version="1.0" encoding="utf-8"?
>
//ibatis.apache.org/dataMapper" xmlns: xsi="http: //www.w3.org/2001/XMLSchema-instance" > -- Optional --> -- Not required if providers.config is located in default location --> connectionString="user id=${username}; password=${password}; data source=${datasource}; database=${database};"/> type="IBatisNet.Test.Domain.YesNoBoolTypeHandlerCallback, IBatisNet.Test"/>
在接下来的几个小节中,我们将讨论SqlMap.config文件的详细配置选项。
在接下来的3章(4,5,6)中,我们将探索在SqlMap.xml文件中定义的映射语句(MappedStatement)。
然后在第7章,我们将详细讨论事务管理相关的内容。
3.6.2
有时,配置文件中的同一个值会出现在多处。
通常情况下,我们将程序在服务器间迁移时,某些配置选项的值要进行修改。
为了更好地管理这些配置选项的值,我们可指定一个标准的属性文件(含有name=value对),将DataMapper的部分配置转移到其中。
在属性文件中的值将成为shell变量,可以在DataMapper配置文件和DataMap定义文件中使用。
例如,如果属性文件中包含了
xml version="1.0" encoding="utf-8" ?
>
那么在DataMapper配置文件(SqlMap.config)中的任何元素都可以使用变量${UserId}来插入值”sa”。
例如:
使用属性文件使生成、测试、部署的过程变得简单。 3.6.2.1 Attribute Description resource 指定要从应用程序根目录加载的属性文件。 url 指定属性文件的绝对路径 \Web\MyApp\Resources\properties.config"/> -or- //c: \Web\MyApp\Resources\properties.config/> embedded 指定要从程序集的资源中加载的属性文件。 该特性的语法为’[extendednamespace.]filename,assemblyName’。 3.6.2.2 我们可以同时指定几个不同属性文件,或者使用 例如: Attribute Description resource 指定要从应用程序根目录加载的属性文件。 resource="properties.config" url 指定属性文件的绝对路径 url="c: \Web\MyApp\Resources\properties.config" -or- url="file: //c: \Web\MyApp\Resources\properties.config" embedded 指定要从程序集的资源中加载的属性文件。 该特性的语法为’[extendednamespace.]filename,assemblyName’。 embedded="properties.config,IBatisInAction.Ch03Web" key 定义一个属性键(变量)名 Key="username" value 为指定的属性定义其值。 3.6.3 在ADO.NET中,我们通过Provider来访问数据库系统。 对于一个数据库系统,可以使用特定的Provider,也可以使用通用的ODBCProvider。 iBATIS的DataMapper使用插件的方式来使用Provider。 每一种Provider都表现为一个XML描述元素,位于providers.config中。 iBATIS的DataMapper发行包包含了一个标准的providers.config,其中一共有13种Provider元素: ∙ --[if! supportLists]--> --[endif]-->sqlServer1.0-MicrosoftSQLServer7.0/2000provideravailablewith.NETFramework1.0 ∙ --[if! supportLists]--> --[endif]-->sqlServer1.1-MicrosoftSQLServer7.0/2000provideravailablewith.NETFramework1.1 ∙ --[if! supportLists]-->OleDb1.1-OleDbprovideravailablewith.NETFramework1.1 ∙ --[if! supportLists]--> --[endif]-->Odbc1.1-Odbcprovideravailablewith.NETFramework1.1 ∙ --[if! supportLists]-->sqlServer2.0-MicrosoftSQLServer7.0/2000/2005provideravailablewith.NETFramework2.0 ∙ --[if! supportLists]--> --[endif]-->OleDb2.0-OleDbprovideravailablewith.NETFramework2.0 ∙ --[if! supportLists]--> --[endif]-->Odbc2.0-Odbcprovideravailablewith.NETFramework2.0 ∙ --[if! supportLists]-->oracle9.2-OracleproviderV9.2.0.401 ∙ --[if! supportLists]--> --[endif]-->oracle10.1-OracleproviderV10.1.0.301 ∙ --[if! supportLists]--> --[endif]-->oracleClient1.0-MSOracleproviderV1.0.5availablewith.NETFramework1.1 ∙ --[if! supportLists]-->ByteFx-ByteFxMySQLproviderV0.7.6.15073 ∙ --[if! supportLists]--> --[endif]-->MySql-MySQLproviderV1.0.4.20163 ∙ --[if! supportLists]-->SQLite3-SQLite.NETproviderV0.21.1869.3794 ∙ --[if! supportLists]--> --[endif]-->Firebird1.7-FirebirdSQL.NETproviderV1.7.0.33200 ∙ --[if! supportLists]-->PostgreSql0.7-NpgsqlproviderV0.7.0.0 ∙ --[if! supportLists]-->iDb2.10-IBMDB2iSeriesproviderV10.0.0.0 注意: 如果您使用的是SQLServer2005,那么可以打开MARS(MultipleActiveResultSet)选项,即设置a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- iBATIS 安装 配置