1.初始化java
从今天开始我将对MyBatis的源码进行阅读学习,学习的方式是一边按照官方文档的使用教程的顺序来逐步阅读对应实现源码,并分析相应类结构及设计思想。sql
使用MyBatis通常有两种方式加载配置信息,一种是使用XML配置文件,另外一种是使用Java代码来自定义配置信息。通常状况下咱们可能都会使用XML的方式来定义配置信息,这样的好处是配置信息一目了然,也方便调整。首先来看下如何加载配置文件。mybatis
在MyBatis中,操做数据的是SqlSession接口。此接口对象由对应的工厂类SqlSessionFactory负责产生,那么如何构建这个工厂类呢,MyBatis官方文档在一开始就给出了相应的初始化方式。学习
String resource = "org/mybatis/example/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
首先指定一个配置文件路径,而后使用SqlSessionFactoryBuilder来根据配置信息构建咱们要使用的SqlSessionFactory类。那么这里先了解一下这个builder类内部都作了什么。ui
从类结构图上看,除了一个构造方法外,全都是重载了不一样参数的build方法。其参数能够是Reader,InputStream,Configuration对象等。下面挑几个方法看下。设计
public SqlSessionFactory build(InputStream inputStream) { return build(inputStream, null, null); } public SqlSessionFactory build(InputStream inputStream, String environment) { return build(inputStream, environment, null); } public SqlSessionFactory build(InputStream inputStream, Properties properties) { return build(inputStream, null, properties); } //使用InputStream传入配置文件的几个重载方法都调用此方法,实际可传入文件流,环境信息,以及属性信息 public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) { try { //使用XMLConfigBuilder对象将IO流表示的配置文件内容转化成Configuration对象实例,进行最终构建。 XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties); 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. } } } //全部的build方法最终都调用此处,建立默认的SqlSessionFactory。 public SqlSessionFactory build(Configuration config) { return new DefaultSqlSessionFactory(config); }
上面的四个build方法中前三个都调用的是第四个build方法,前三个都只传入了部分参数。而在第四个build方法中,使用了XMLConfigBuilder类来加载XML配置文件信息code
XMLConfigBuilder拥有多个构造方法,能够传入不一样方式的初始化信息,最终调用parse()方法将信息转换成Configuration类的实例。xml
最后,SqlSessionFactoryBuilder对象使用转换后的Configuration对象来建立一个默认的SqlSessionFactory,所以,咱们若是不另外处理的话,默认使用的工厂类就是DefaultSqlSessionFactory。对象
public SqlSessionFactory build(Configuration config) { return new DefaultSqlSessionFactory(config); }
初始化工厂类以后,就能够进行数据操做了。教程