mybatis -- 初始化过程
2020-05-08 11:04
78 查看
一、 MyBatis的初始化做了什么
加载自己运行时所需要的配置信息
MyBatis的XML配置文件信息,会被加载进入MyBatis内部,使用Configuration 对象作为一个所有配置信息的容器,Configuration对象的组织结构和XML配置文件的组织结构几乎完全一样。MyBatis初始化的过程,就是创建 Configuration对象的过程。
二、MyBatis基于XML配置文件创建Configuration对象的过程
SqlSessionFactoryBuilder 根据传入的数据流生成Configuration对象,然后根据Configuration对象创建默认的SqlSessionFactory实例。
- 调用SqlSessionFactoryBuilder对象的build(inputStream)方法;
- 方法内部会根据输入流inputStream等信息创建XMLConfigBuilder对象;
- 调用XMLConfigBuilder对象的parse()方法
- 将XML配置文件内的信息解析成Configuration对象;
- 根据Configuration对象创建DefaultSessionFactory对象,返回SqlSessionFactory,供Client使用;
总结:当SqlSessionFactoryBuilder执行build()方法,调用了XMLConfigBuilder的parse()方法,解析成Configuration对象,然后调用一个参数为该对象的build方法,返回SqlSessionFactory对象。
SqlSessionFactoryBuilder相关的代码如下所示:
public SqlSessionFactory build(InputStream inputStream) { return build(inputStream, null, null); } public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) { try { //2. 创建XMLConfigBuilder对象用来解析XML配置文件,生成Configuration对象 XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties); //3. 将XML配置文件内的信息解析成Java对象Configuration对象 Configuration config = parser.parse(); //4. 根据Configuration对象创建出SqlSessionFactory对象 return build(config); } 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. } } } //从此处可以看出,MyBatis内部通过Configuration对象来创建SqlSessionFactory, public SqlSessionFactory build(Configuration config) { return new DefaultSqlSessionFactory(config); }
三、涉及到的设计模式:Builder模式应用
SqlSessionFactory的创建
由于构造时参数不定,为其创建一个构造器Builder,将SqlSessionFactory的构建过程和表示分开:
相关文章推荐
- 源码分析-Mybatis初始化过程
- 从底层源码浅析Mybatis的SqlSessionFactory初始化过程
- Mybatis架构设计及源码分析-Mybatis配置文件初始化全过程
- Mybatis源码解析-Mybatis初始化过程
- mybatis源码学习——Configuration类及其初始化过程、TypeHandler、TypeAlias
- MyBatis源码解析(一)——MyBatis初始化过程解析
- MyBatis源码解析(一)——MyBatis初始化过程解析
- Mybatis深入之初始化过程
- MyBatis源码解析(一)——MyBatis初始化过程解析
- mybatis_初始化过程源码解析
- Mybatis深入之初始化过程
- MyBatis源码解析(一)——MyBatis初始化过程解析
- 将表中的初始化数据转化成insert into语句的存储过程
- Springbean初始化过程
- spring 初始化对象的过程
- JAVA对象的初始化过程
- Java一个对象的初始化过程
- java对象的创建过程:类的初始化与实例化
- 深入浅出MFC学习笔记:MFC六大关键技术仿真之MFC程序的初始化过程
- Spring容器初始化过程