好文档 - 专业文书写作范文服务资料分享网站

IBatis教程 

天下 分享 时间: 加入收藏 我要投稿 点赞

通过这种访问方式,就可以在应用程序中调用每个数据库自己独立的映射实例。例如:[C#]

ISqlMappersqlServer=SqlServerMapper.Get();ISqlMapperaccess=AccessMapper.Get();

6.6.1.3DomSqlMapBuilder配置项

iBATIS提供了多种方法对SqlMap.Config文档的内容进行加载。所有的这些方法都可以通过DomSqlMapBuilderAPI进行访问,用于创建SqlMapper实例。

例:调用SqlMapper配置的基本方法:ISqlMappermapper=builder.Configure();

如果工程中设置的配置文件(SqlMap.Config)名不是SqlMap.Config,而是其它的文件名,或者不是保存在默认的路径下(根据工程种类的不同而不同,前文有说明),那么可以把该文件的相对路径或者绝对路径作为参数传递给Configure方法。例如:

/*ConfigureaSqlMapperfromafilepath.Usesarelativeresourcepathfromyourapplicationrootoranabsolutefilepathsuchas*假设:strPath=\*/

ISqlMappermapper=builder.Configure(strPath);

除此之外,还可以使用FileInfo对象或者Uri对象作为参数传递给DomSqlMapBuilder来加载SqlMap.config文件。例如:

/*ConfigureaSqlMapperwithFileInfo.*/

FileInfoaFileInfo=someSupportClass.GetDynamicFileInfo();ISqlMappermapper=builder.Configure(aFileInfo);

/*ConfigureaSqlMapperthroughaUri.*/UriaUri=someSupportClass.GetDynamicUri();ISqlMapperanotherMapper=builder.Configure(aUri);

如果采用XmlDocument或者Stream对象加载DataMapper配置信息,有重载的Configure方法来进行处理。例如:

/*ConfigureaSqlMapperwithanXmlDocument*/

XmlDocumentanXmlDoc=someSupportClass.GetDynamicXmlDocument();ISqlMappermapper=builder.Configure(anXmlDoc);

/*ConfigureaSqlMapperfromastream.*/

StreamaStream=someSupportClass.GetDynamicStream();ISqlMapperanotherMapper=builder.Configure(aStream);

前面提到过,DomSqlMapBuilderAPI提供的ConfigureAndWatch方法用于对映射配置信息和数据映射定义文档进行监视。下面的单例程通过在运行期间重新加载配置文档完成了对SqlMapper实例进行重新配置。例:Mapper配置引擎委托...

protectedstaticvoidConfigure(objectobj){

_mapper=null;}

protectedstaticvoidInitMapper(){

ConfigureHandlerhandler=newConfigureHandler(Configure);DomSqlMapBuilderbuilder=newDomSqlMapBuilder();_mapper=builder.ConfigureAndWatch(handler);}...

如果使用了单例程,需要传递一个ConfigureHandler(回调委托)参数才能使得单例程获知重新加载配置文档以完成对SqlMapper实例的更新。在Mapper例子中,Configure是作为回调委托方法使用的。

由于需要监视配置文件的更新情况,所以在使用环境的文件系统中SqlMap.config文件必须允许应用程序访问,因此ConfigureAndWatch需要按如下三种方式来配置:

(1)

/*监视配置文档,在有更新的情况下自动通知SqlMapper.

基本的ConfigureAndWatch方法调用方式在应用程序根目录下查询默认的配置文件名sqlMap.config*/

publicISqlMapperConfigureAndWatch(ConfigureHandlerconfigureDelegate)

(2)

/*监视配置文档,在有更新的情况下自动通知SqlMapper.

用相对路径或者绝对路径设置配置文件存放路径,如\*/

publicISqlMapperConfigureAndWatch(stringresource,ConfigureHandlerconfigureDelegate)

(3)

/*监视配置文档,在有更新的情况下自动通知SqlMapper.配置文件采用FileInfo实例方式传送.*/

publicISqlMapperConfigureAndWatch(FileInforesource,ConfigureHandlerconfigureDelegate)

6.6.1.4DomSqlMapBuilder高级设置

在调用'Configure'方法闯进ISqlMapper之前,可以设置下表中的属性值:属性Properties

说明

在加载配置文件之前,程序会加载properties.config文件,那么这个属性设置就是允许向加载properties.config文件属性列表的对象中添加新的属性名称和属性值。(或许英文比汉语更好理解)例如:

NameValueCollectionproperties=newNameValueCollection();properties.Add(\\builder.Properties=properties;

ISqlMappermapper=builder.Configure(\

GetAccessorFactory

在配置之前允许设置一个get访问器工厂,参阅IGetAccessorFactory接口,在iBATIS中该接口

定义了成员对象的set访问器。

(英文原文:Allowstosetacustomgetaccessorfactorybeforeconfiguration,seeIGetAccessorFactoryinterfacewhichdefinesthecontractforthefactoryresponsibletobuildsetaccessorforamemberobjectiniBATIS.)

SetAccessorFactory

在配置之前允许设置一个set访问器工厂,参阅ISetAccessorFactory接口,在iBATIS中该接口定义了一个成员对象的get访问器。

Allowstosetacustomsetaccessorfactorybeforeconfiguration,seeISetAccessorFactoryinterfacewhichdefinesthecontractforthefactoryresponsibletobuildgetaccessorforamemberobjectiniBATIS.

ObjectFactory

在配置之前允许设置一个object工厂参阅IObjectFactory接口,在iBATIS中该接口定义创建成员对象方法。

Allowstosetacustomobjectfactorybeforeconfiguration,seeIObjectFactoryinterfacewhichdefinesthecontractforthefactoryresponsibleforobjectcreationiniBATIS.

SqlMapper

在配置之前允许设置一个SqlMapper,参阅ISqlMapper接口。

AllowstosetacustomSqlMapperbeforeconfiguration,seeISqlMapperinterface.

ValidateSqlMapConfig

在配置之前是否启用对配置文档的架构验证。

6.6.2通过SqlMapper获取DataMapperAPI

通过SqlMapper可以访问的DataMapperAPI如下表所示:

[C#]1.查询API

(1)publicobjectInsert(stringstatementName,objectparameterObject);(2)publicintUpdate(stringstatementName,objectparameterObject);(3)publicintDelete(stringstatementName,objectparameterObject);

(4)publicobjectQueryForObject(stringstatementName,objectparameterObject);(5)publicTQueryForObject(stringstatementName,objectparameterObject);

(6)publicobjectQueryForObject(stringstatementName,objectparameterObject,objectresultObject);(7)publicTQueryForObject(stringstatementName,objectparameterObject,TresultObject);

(8)publicIListQueryForList(stringstatementName,objectparameterObject);(9)publicIListQueryForList(stringstatementName,objectparameterObject);

(10)publicvoidQueryForList(stringstatementName,objectparameterObject,IListresultObject);(11)(12)

publicvoidQueryForList(stringstatementName,objectparameterObject,IListresultObject);publicIListQueryForList(stringstatementName,objectparameterObject,intskipResults,intmaxResults);

(13)publicIListQueryForList(stringstatementName,objectparameterObject,intskipResults,intmaxResults);

(14)publicIListQueryWithRowDelegate(stringstatementName,objectparameterObject,RowDelegaterowDelegate);

(15)publicIListQueryWithRowDelegate(stringstatementName,objectparameterObject,SqlMapper.RowDelegaterowDelegate);

[废弃的方法]

publicPaginatedListQueryForPaginatedList(StringstatementName,objectparameterObject,

intpageSize);

publicIDictionaryQueryForDictionary(stringstatementName,objectparameterObject,

stringkeyProperty)

IDictionaryQueryForDictionary(stringstatementName,objectparameterObject,

stringkeyProperty);

publicIDictionaryQueryForDictionary(stringstatementName,objectparameterObject,

stringkeyProperty,stringvalueProperty)

publicIDictionaryQueryForDictionary(stringstatementName,objectparameterObject,

stringkeyProperty,stringvalueProperty);

publicIDictionaryQueryForMap(stringstatementName,objectparameterObject,stringkeyProperty)publicIDictionaryQueryForMap(stringstatementName,objectparameterObject,

stringkeyProperty,stringvalueProperty)

/*连接字符串API*/publicvoidOpenConnection()publicvoidCloseConnection()

/*事务API*/

publicvoidBeginTransaction()

publicvoidBeginTransaction(boolopenConnection)publicvoidBeginTransaction(IsolationLevelisolationLevel)

publicvoidBeginTransaction(boolopenConnection,IsolationLevelisolationLevel)

publicvoidCommitTransaction()

publicvoidCommitTransaction(boolcloseConnection)

publicvoidRollBackTransaction()

publicvoidRollBackTransaction(boolcloseConnection)说明:

从上面的方法参数可以看出,凡是接受映射SQL语句或存储过程的方法,都把映射SQL语句或存储过程在映射定义文件中的名称作为第一个参数接收。而且从上面可以看到parameterObject在一般的查询方法中也是需要传递的,但如果查询不需要参数,那么把null作为参数传递即可。如果查询需要参数,则传递一个有效对象作为parameterObject参数是必须的。

DatatMapper组件把正在工作的ISqlMapSession保存在不同的缓存中:在web环境中,保存在Http.Request.Items中;windows环境下

保存在当前线程中。在使用加载完配置之前或之后,可以通过ISessionStore接口设置缓存属性。如:

sqlMapper.SessionStore=newHybridWebThreadSessionStore(sqlMapper.Id);...

sqlMapper.QueryOject(...)

6.6.2.1Insert,Update,Delete

publicobjectInsert(stringstatementName,objectparameterObject);publicintUpdate(stringstatementName,objectparameterObject);publicintDelete(stringstatementName,objectparameterObject);

映射文件中的数据操作语句中用到了insert,update,delete的时候,就需要调用与各自对应的API。元素中可以有嵌套的元素,以便产生主键。如果元素中使用了节点,就可以得到相应的返回值,不使用节点,返回值将为空。Update和delete方法返回数据库操作语句运行后受影响的行数。

6.6.2.2QueryForObject

publicobjectQueryForObject(stringstatementName,objectparameterObject);

publicobjectQueryForObject(stringstatementName,objectparameterObject,objectresultObject);publicTQueryForObject(stringstatementName,objectparameterObject);

publicTQueryForObject(stringstatementName,objectparameterObject,TresultObject);

在查询语句(数据库操作语句本质是select)的运行结果如果是一行数据,那么可以调用QueryForObject方法。因为在映射定义文件中定义了该查询语句运行结果所对应的返回实体类,所以执行此方法可以得到对象实体。实际应用中经常会用到组合的查询操作语句,那么可以在程序运行中管理返回对象的类型,所需要做的就是把返回对象作为第三个参数resultObject传递到方法中。

6.6.3QueryForList

publicIListQueryForList(stringstatementName,objectparameterObject);

publicvoidQueryForList(stringstatementName,objectparameterObject,IListresultObject);

publicIListQueryForList(stringstatementName,objectparameterObject,intskipResults,intmaxResults);publicIListQueryForList(stringstatementName,objectparameterObject);

publicvoidQueryForList(stringstatementName,objectparameterObject,IListresultObject);

publicIListQueryForList(stringstatementName,objectparameterObject,intskipResults,intmaxResults);

在查询语句(数据库操作语句本质是select)的运行结果如果是多行数据,那么可以调用QueryForList方法。返回结果list中的每一个对象都与查询结果中的行对应。如果需要让程序自己管理返回列表中对象的类型,可以把返回对象作为第三个参数传递。如果只需要查询结果中的部分对象,可以按照第三种格式调用此方法。skipResults参数表示从结果行的起点需要跳过的行数,maxResults参数表示所需返回行的最大值(目标行的最后一行)。PaginatedList方法提供了封装的更好的相同功能方法。

QueryWithRowDelegate也用于处理多行的操作语句,但是附加了对行中数据的处理,对行中数据的处理过程通过委托的方式提供给所调用的方。

6.6.4QueryWithRowDelegate

publicdelegatevoidRowDelegate(objectobj,IListlist);

publicIListQueryWithRowDelegate(stringstatementName,objectparameterObject,RowDelegaterowDelegate);

publicIListQueryWithRowDelegate(stringstatementName,objectparameterObject,SqlMapper.RowDelegaterowDelegate);

无论数据库设计的多么优秀,或者我们的数据映射文档编制的多么优秀,数据库操作语句返回的对象结果集数据也有可能是不理想的,此时就需要对对象结果集中的对象进行处理,甚至我们有时候需要删除掉list中的某些对象,或者需要用结果集中的对象创建更有用的对象。为了把结果

IBatis教程 

通过这种访问方式,就可以在应用程序中调用每个数据库自己独立的映射实例。例如:[C#]ISqlMappersqlServer=SqlServerMapper.Get();ISqlMapperaccess=AccessMapper.Get();6.6.1.3DomSqlMapBuilder配置项iBATIS提供了多种方法对SqlMap.Config文档的
推荐度:
点击下载文档文档为doc格式
1ob9s1oo6h6et871e27e
领取福利

微信扫码领取福利

微信扫码分享