iBatis.Net(3):创建SqlMapper实例

在iBatis中,我们把所有的配置和映射都放在XML文件里(当然,这未必是一定需要的),但是,XML文件不是可执行的,所以,如果我们要在我们的c#代码里使用iBatis的映射,就必须通过一个类来加载、分析、使用它。所以在iBatis中,提供给了我们很多的API来做这些事情,配置以及映射文件的加载和监视是在创建SqlMapper实例的时候进行的,而所有的数据映射的工作以及我们对数据库的操作,是需要在SqlMapper实例上调用方法来完成的,SqlMapper实例具有多线程并且长期活动的性质,在iBatis外界,可以随处使用这样的方法来调用得到SqlMapper实例

ISqlMapper mapper=Mapper.Instance();

在我们第一次调用Mapper.Instance()的时候,DomSqlMapBuilder对象会通过解析SqlMap.config(默认路径和命名)文件来出创建SqlMapper实例,在 以后的调用中,则会使用缓存中的mapper对象,那么,如果我们在应用程序运行期间,修改了我们的映射文档,结果是怎样的呢。如果我们使用Mapper.Instance()的方法来得到mapper对象,则在这个过程中,默认使用了DomSqlMapBuilder.ConfigureAndWatch的方法来监视配置文件的状况,如果期间出现了改动,SqlMapper对象会被安全的重新载入,当然,如果你不喜欢iBatis替你做这件事情,则可以通过

ISqlMapper mapper=builder.Configure()

来获取sqlMapper实例

SqlMapper.Config文档的加载

iBatis提供了多种方法对SqlMapper.Config文档的内容进行加载,前面我们讲过默认情况下SqlMapper.Config的存放位置,那么如果我们不是放在了默认位置或者不是默认的文件名该怎么办呢

在默认情况下,我们可以使用这样的方法得到SqlMapper实例

ISqlMapper mapper=builder.Configure()

其实这个Configure可以接受一个参数,他可以是String类型,FilePath对象,Uri对象XmlDocument对象,甚至是Stream类型

比如

String str=”file:\\c:\another.config”;
builder.Configure(str);

同样,如果在使用ConfigureAndWatch方法加载并监视映射文档的情况下,这个方法需要一个ConfigureHandler作为回调委托的参数

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我的博客

Thinkphp3.2.3FTP上传文件同名覆盖问题

//原代码在\ThinkPHP\Library\Think\Upload\Driver\Ftp.class.php //大概在94行左右 /** ...

35010
来自专栏友弟技术工作室

SQLAlchemy简单入门

SQlAlchemy简单使用 sqlalchemy介绍 SQLAlchemy的是Python的SQL工具包和对象关系映射器,让应用程序开发人员可以使用上SQL...

37610
来自专栏Albert陈凯

Hadoop数据分析平台实战——060深入理解MapReduce 01(案例)离线数据分析平台实战——060深入理解MapReduce 01(案例)

离线数据分析平台实战——060深入理解MapReduce 01(案例) 用户自定义数据类型 MapReduce中的数据类型至少有两种用途。 第一个用途,这些类...

2999
来自专栏刘望舒

Android内存优化(四)解析Memory Monitor、Allocation Tracker和Heap Dump

前言 1.Memory Monitor 在Android Studio(以下简称AS)中Android Monitor是一个主窗口,它包含了Logcat,、Me...

2126
来自专栏马洪彪

Java设计模式(一)工厂模式

一、场景描述 仪器数据文件的格式包含Pdf、Word、Excel等多种,不同种格式的文件其数据的采集方式不同,因此定义仪器数据采集接口,并定义PDF、Excel...

4059
来自专栏Django Scrapy

python3 下调用zabbix api 获取多个机房的IP

根据工作的需要,需要查看监控中的所有ip,我们一共有三个机房,每个机房都部署了同样的zabbix监控 根据三个园区的 监控api的url 实现功能:不输入参数 ...

3515
来自专栏lestat's blog

tp3.2.3实现支持点击排序

假设: Admin/Home/Controller/BaseController.class.php是一个基础控制器 $current_params和$in是两...

3223
来自专栏蓝天

C/C++常见gcc编译链接错误解决方法

用“-Wl,-Bstatic”指定链接静态库,使用“-Wl,-Bdynamic”指定链接共享库,使用示例: -Wl,-Bstatic -lmysq...

2483
来自专栏salesforce零基础学习

salesforce 零基础开发入门学习(五)异步进程介绍与数据批处理Batchable

本篇知识参考:https://developer.salesforce.com/trailhead/force_com_dev_intermediate/asy...

3197
来自专栏码云1024

c++DLL编程详解

4186

扫码关注云+社区