小胡的博客

  • 首页
  • 文章归档
  • 默认分类
  • 关于页面

  • 搜索

mybatis源码分析-001

发表于 2020-04-04 | 分类于 mybaits | 0 | 阅读次数 8996

启

此案例基于mybatis原生demo分析

测试代码

Properties properties = new Properties();
      // 使用ClassLoader加载properties配置文件生成对应的输入流
InputStream in = MybatisFirst.class.getClassLoader().getResourceAsStream("db.properties");
      // 使用properties对象加载输入流
      properties.load(in);
   // 配置文件
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
   
   // 使用SqlSessionFactoryBuilder从xml配置文件中创建SqlSessionFactory
   sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,properties);

SqlSessionFactory builder,此处设计模式是Builder模式。最终实现了XMLConfigBuilder

  public SqlSessionFactory build(InputStream inputStream, Properties properties) {
    return build(inputStream, null, properties);
  }

xml最终调用构建方法

// xml最终都会调用这个方法构建
public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
  try {
    // 读取Xml
    XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
    // 解析xml  并构建SqlSessionFactory
    return build(parser.parse());
  } catch (Exception e) {
    throw ExceptionFactory.wrapException("Error building SqlSession.", e);
  } finally {
    ErrorContext.instance().reset();
    try {
      inputStream.close();
    } catch (IOException e) {
      // Intentionally ignore. Prefer previous error.
    }
  }
}

其中 XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);其实就是加载xml文件而已,parser.parse()才是解析xml文件。不过值得注意的是 BaseBuilder的构造方法

//Configuration 是 MyBatis 初始化过程的核心对象, MyBatis 中几乎全部的配置信息会保存到
//Configuration 对象中 。 Configuration 对象是在 MyBatis 初始化过程中创建且是全局唯一的,
protected final Configuration configuration;
  // 类型别名注册器
protected final TypeAliasRegistry typeAliasRegistry;
protected final TypeHandlerRegistry typeHandlerRegistry;

// super(new Configuration());  //这里面是一个基础信息
public BaseBuilder(Configuration configuration) {
  this.configuration = configuration;
  this.typeAliasRegistry = this.configuration.getTypeAliasRegistry();
  this.typeHandlerRegistry = this.configuration.getTypeHandlerRegistry();
}

别名

Mybatis支持别名,这个很多都知道的,所谓别名就是在指定类型是不用写全类路径,只需要这样

 <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> 

那么,我要在需要使用User的地方可以直接使用对应的别名usr来代替。
Mybatis同样为我们提供了默认的别名,
org.apache.ibatis.type.TypeAliasRegistry,这里面定义默认的别名,org.apache.ibatis.type.TypeHandlerRegistry则定义了别名对应的处理器。

XPathParser

XPathParser是Mybatis处理XML的工具类,具体类容就不多赘述。

  • 本文作者: 小胡
  • 本文链接: http://myblog.run/archives/mybatis源码分析-001
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
mysql安装与新建用户
000-mybatis源码分析-整体架构
  • 文章目录
  • 站点概览
小胡

小胡

5 日志
5 分类
0 标签
RSS
Creative Commons
© 2026 小胡
由 Halo 强力驱动
|
主题 - NexT.Gemini v5.1.4
渝ICP备20006930号