Ibatis.Net 各类的作用说明学习(三)

Ibatis中,加载、分析配置及映射文件是在创建SqlMapper实例的时候进行的,另外对数据库的操作,也是在SqlMapper实例上调用方法来完成。创建SqlMapper的实例的方式是:

ISqlMapper mapper = Mapper.Instance();
//DomSqlMapBuilder builder = new DomSqlMapBuilder();
//ISqlMapper mapper = builder.Configure();

在第一次调用Mapper.Instance()的时候,由DomSqlMapBuilder对象解析SqlMap.config(默认路径和命名)文件来创建SqlMapper实例,然后会缓存该mapper对象,如果程序运行过程中,修改了映射文件,那么再调用Mapper.Instance()创建SqlMapper实例时,SqlMapper会被重新加载创建。相当于一个文件缓存依赖,这个文件缓存依赖由DomSqlMapBuilder.ConfigureAndWatch方法来实现。

IBatis.net的这个东西有个地方不好,默认是使用HttpContext作为xxx容器的。当非Web请求线程调用时,如Timer调用时会报如下错误:

ibatis.net:WebSessionStore: Could not obtain reference to HttpContext

这个问题可以在创建SQLMapper的时候指定:

添加名为MapperHelper的类,可以通过此类来获得SqlMapper实例

代码如下:

 public class MapperHelper
    {
        private static volatile ISqlMapper _mapper;
        private static readonly object obj = new object();
        private static string SQL_MAP_CONFIG = "SqlMap.config";
        protected static void Configure(object obj)
        {
        }

        public static ISqlMapper Instance(string sqlMapConfig = "")
        {
            if (string.IsNullOrEmpty(sqlMapConfig))
            {
                sqlMapConfig = SQL_MAP_CONFIG;
            }
            ConfigureHandler handler = new ConfigureHandler(Configure);
            DomSqlMapBuilder builder = new DomSqlMapBuilder();
            try
            {
                if (_mapper == null)
                {
                    lock (obj)
                    {
                        if (_mapper == null)
                        {
                            _mapper = builder.ConfigureAndWatch(sqlMapConfig, handler);
                            if (HttpContext.Current == null)
                            {
                                _mapper.SessionStore = new HybridWebThreadSessionStore(_mapper.Id);
                            }
                        }
                    }
                }
                return _mapper;
            }
            catch (Exception e)
            {
                return null;
            }
        }

    }

 

 

参考:http://www.cnblogs.com/caoyc/category/873268.html

转载于:https://www.cnblogs.com/vanblog/p/8583522.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值