MyBatis_3.4.0学习系列(一)
来源:互联网 发布:康耐视视觉检测软件 编辑:程序博客网 时间:2024/06/03 12:28
每个基于MyBatis的应用都是以一个SqlSessionFactory的实例为中心的。SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得。而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例。
当通过以下方式获得了一个SqlSessionFactory实例的时候:
String resource = "com/test/modul/MyBatis_test/mybatis-config.xml";InputStream inputStream;SqlSession sqlSession;inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, "development1");//这里可以选择不同的environment(在主配置文件中配置)该sqlSessionFactory实例中有且只有一个成员变量——configuration——类org.apache.ibatis.session.Configuration的实例,该类对应着MyBatis的主配置文件。该类中定义的成员变量基本上和配置文件中的标签一一对应,所以Configuration类在MyBatis中的地位是非常高的,它为该框架在整个应用运行期间提供相关的配置信息。而正因如此,所以在MyBatis框架启动初期就要将配置文件中的信息加载到应用中,并将信息存放在Configuration实例变量中。
接下来让我们探索一下MyBatis是怎么创建SqlSessionFactory实例的?
上面的例子最终会调用SqlSessionFactoryBuilder类的该方法:public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties)
public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) { try { 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. } } }
上面第三、四行代码非常重要,做的事情很多:配置文件的解析、配置文件信息到Configuration对象的转换等。
先看第三行代码:
XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
会创建一个XMLConfigBuilder类的一个实例:
public XMLConfigBuilder(InputStream inputStream, String environment, Properties props) { this(new XPathParser(inputStream, true, props, new XMLMapperEntityResolver()), environment, props);//此处创建了一个XPathParser类的一个实例 }private XMLConfigBuilder(XPathParser parser, String environment, Properties props) {//实际上会调用该类私有的构造函数 super(new Configuration()); ErrorContext.instance().resource("SQL Mapper Configuration"); this.configuration.setVariables(props); this.parsed = false; this.environment = environment; this.parser = parser; }Configuration实例终于开始展露头角啦。这里还只是做了一些准备工作,但是XPathParser实例parser很重要。接着往下看
接着就到了上面的第四行代码:
return build(parser.parse());然后是下面的代码:
public Configuration parse() { if (parsed) { throw new BuilderException("Each XMLConfigBuilder can only be used once."); } parsed = true; parseConfiguration(parser.evalNode("/configuration"));//这行代码的背后会给Configuration实例成员赋予配置文件中的信息 return configuration; }最后是下面的代码:
public SqlSessionFactory build(Configuration config) { return new DefaultSqlSessionFactory(config); }因此,最后会返回一个DefaultSqlSessionFactory类型的SqlSessionFactory实例,这个实例就是我们上面例子中随后一行所得到的实例。
第一次看源码,讲得很粗糙,如果要详细讲源码的话,这一段会讲很对,其实例子中的最后一行代码就是完成配置信息到代码的转换。今天先看到这儿,明天继续!
0 0
- MyBatis_3.4.0学习系列(一)
- MyBatis_3
- J2ME系列学习(一)
- AXIS系列学习(一)
- JAVA3D学习系列(一)
- JAVA学习系列(一)
- JNI学习系列(一)
- K60系列学习(一)
- F28377D学习系列(一)
- (一)Spark学习系列
- GRACE学习系列(一)
- es6学习系列---(一)
- 迁移学习系列(一)
- tensorflow学习系列(一)
- SSM学习系列(一)
- OpenCV学习系列(一)
- mybatis学习笔记_Sql2005增,删,改,查(mybatis_3.2.2.jar)
- Ruby系列学习资料(一)
- Mac OS X 系统12个常用的文本编辑快捷键(移动、选中)
- 莫斯科大学数学力学系 数学部专门化课程目录
- Using dispatch groups to wait for multiple web services
- MongoDB下载和安装
- LINUX 驱动学习 -设备模型之别人的理解(2)
- MyBatis_3.4.0学习系列(一)
- Djang建立项目
- 编译原理之词法分析和语法分析
- mySql实用小常识
- 自定义控件三部曲之绘图篇(十七)——为Bitmap添加阴影并封装控件
- spark学习 —— 入门
- agrc argv解释
- 关于CoordinatorLayout与Behavior的一点分析
- 加了transform:translateX后position:fixed没效果