此文参考为读后理解,如有错误,欢迎指出
原文http://blog.youkuaiyun.com/luanlouis/
Mybatis主要有一下这些属性:
-configuration 配置
-properties 属性
-settings 设置
-typeAliases 类型命名
-typeHandlers 类型处理器
-objectFactory 对象工厂
-plugins 插件
-environments 环境
-environment 环境变量
-transactionManager 事务管理器
-dataSource 数据源
-映射器
mybatis用了org.apache.ibatis.session.Configuration这个类对象作为储存配置信息的容器
其结构与XML配置文件的结构基本相差无几。
Mybatis的初始化过程就是Configuration对象的创建过程
初始化方式有两种:
1.基于XML文件创建
基于XML配置文件的方式是将MyBatis的所有配置信息放在XML文件中,MyBatis通过加载并XML配置文件,将配置文 信息组装成内部的Configuration对象
2.基于JAVA API创建
MyBatis使用者在Java代码中,手动创建Configuration对象,然后将配置参数set 进入Configuration对象中
先看一个初始化mybatis的demo:
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
List list = sqlSession.selectList("com.young.demo.userMapper.findAllUser");
上述语句的作用是执行com.young.demo.userMapper.findAllUser中定义的SQL语句,返回一个List结果集。总的来说,上述代码经历了mybatis初始化 -->创建SqlSession -->执行SQL语句 返回结果三个过程
上面的过程详解:
1. 调用SqlSessionFactoryBuilder对象的build(inputStream)方法;
2. SqlSessionFactoryBuilder会根据输入流inputStream等信息创建XMLConfigBuilder对象;
3. SqlSessionFactoryBuilder调用XMLConfigBuilder对象的parse()方法;
4. XMLConfigBuilder对象返回Configuration对象;
5. SqlSessionFactoryBuilder根据Configuration对象创建一个DefaultSessionFactory对象;
6. SqlSessionFactoryBuilder返回 DefaultSessionFactory对象给Client,供Client使用。
其中build方法的代码实现:
1. 创建XMLConfigBuilder对象用来解析XML配置文件,生成Configuration对象
XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
2. 将XML配置文件内的信息解析成Java对象Configuration对象
Configuration config = parser.parse();
3. 根据Configuration对象创建出SqlSessionFactory对象
return build(config);
上面初始化涉及到的对象:
SqlSessionFactoryBuilder : SqlSessionFactory的构造器,用于创建SqlSessionFactory,采用了Builder设计模式
Configuration :该对象是mybatis-config.xml文件中所有mybatis配置信息
SqlSessionFactory:SqlSession工厂类,以工厂形式创建SqlSession对象,采用了Factory工厂设计模式
XmlConfigParser :将mybatis-config.xml文件解析成Configuration对象,供SqlSessonFactoryBuilder创建SqlSessionFactory