C军

不玩博客了!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  496 随笔 :: 0 文章 :: 634 评论 :: 571万 阅读

一、SqlMapper类

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

ISqlMapper mapper = Mapper.Instance();

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

如果你不希望修改了配置文件就重新加载,可以通过

ISqlMapper mapper = builder.Configure();

来创建实例。具体的位置写法,可以第二篇。

  IBatis.net的这个东西有个地方不好,默认是使用HttpContext作为xxx容器的。

  当非Web请求线程调用时,如Timer调用时会报如下错误:

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

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

复制代码
SqlMapper.SessionStore = new HybridWebThreadSessionStore(sqlMapper.Id);

/// <summary>
/// 初始化
/// </summary>
/// <param name="sqlMapperPath"></param>
public void InitMapper(string sqlMapperPath)
{
  ConfigureHandler handler = new ConfigureHandler(Configure);
  DomSqlMapBuilder builder = new DomSqlMapBuilder();
  _mapper = builder.ConfigureAndWatch(sqlMapperPath, handler);
  _mapper.SessionStore = new IBatisNet.DataMapper.SessionStore.HybridWebThreadSessionStore(_mapper.Id);
}
复制代码
  就可以解决问题。
  详细解释见:http://www.iloveher.cn/ibatis/hybridwebthreadsessionstore.html
posted on   逆心  阅读(3121)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示