源码分析:
第一步:读取mybatis-config.xml配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
通过Resources工具类,调用ClassLoader读取classpath下的mybatis-config.xml配置文件,得到一个输入流;
第二步:(有关配置文件的解析与处理都在该步骤中)构建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
1、创建一个SqlSessionFactoryBuilder对象:
new SqlSessionFactoryBuilder();
2、调用SqlSessionFactoryBuilder对象的build方法:
build(InputStream inputStream)
3、创建XMLConfigBuilder 对象:
XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
4、创建XMLMapperEntityResolver对象:
new XMLMapperEntityResolver()
5、创建XPathParser对象:
new XPathParser(inputStream, true, props, new XMLMapperEntityResolver())
6、创建XPath对象:
XPathFactory factory = XPathFactory.newInstance();
this.xpath = factory.newXPath();
7、创建Document对象:(DOM解析)
JDK提供的文档解析工厂对象:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
创建一个DocumentBuilder对象:
DocumentBuilder builder = factory.newDocumentBuilder();
解析输入源的xml数据为一个Document文件:
return builder.parse(inputSource);
8、创建Configuration对象
new Configuration()
注册类型别名,初始化Configuration对象的一些成员变量的默认值
9、通过XPath方法解析mybatis-config.xml文件:
parseConfiguration(parser.evalNode("/configuration"));
将解析出来的信息封装到Configuration对象中;
10、通过持有Configuration对象创建一个DefaultSqlSessionFactory对象:
new DefaultSqlSessionFactory(configuration);
总结:
MyBatis解析配置文件的本质就是为了获得Configuration对象;
Configuration 对象可以理解是mybatis的XML配置文件在程序中的化身,是MyBatis非常重要的一个对象,里面封装了MyBatis的整个配置信息;
以上内容是mybatis非常核心关键的一个步骤!
当然,Spring中也有类似的方式,只不过封装的方式与myabtis框架有些区别
接下来,mybatis要做的就是打开sqlSession、获取Mapper接口对象,这两步比较简单
最后就是mybatis最核心的内容,调用Mapper接口对象的方法操作数据库,其底层就是jdbc