zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    java代码操作git实现仓库代码下载至指定目录
    深入学习Java核心 Java内存分配原理
    java使用@PostConstruct注解解决初始化class调用
    linux如何部署owasp-zap
    idea如何把自定义的jar打包至lib目录
    springboot搭建web项目(.html)
    高效学习排序算法
    JS实现双击编辑可修改状态
    linux安装redis集群+常见报错
    Erlang基本语法汇总
  • 原文地址:https://www.cnblogs.com/vanblog/p/8583522.html
Copyright © 2011-2022 走看看