Mybatis 源码解析(一) - Configuration.xml加载
2015-08-05 18:39
405 查看
文章个人学习源码所得,若存在不足或者错误之处,请大家指出。
Mybatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。Mybatis消除了几乎所有的JDBC代码和参数的手工设计以及结果集的检索。Mybatis的前身是ibatis,ibatis是2002年发起的一个开源项目,2010年被谷歌托管,更名为Mybatis,2013年迁移至Github。可能会看本篇文章的人,对于Mybatis都会有一定程度的了解和应用,在此就不做过多介绍了,直接入主题。
Mybatis的入口点是Configuration.xml配置文件加载,Mybatis源码中org.apache.ibatis.io包下负责文件的读取,将本地文件以Reader(字符)或者InputStream(字节)的方式读入内存,接下来我们看一下Mybatis是如何实现Configuration.xml读取的。
在Configuration.xml加载的过程中,Resources、ClassLoaderWrapper等类参与其中,时序图如下,下图只是简单介绍了一下大致流程:
1.Resources类
Resources类是Mybatis为文件读取提供的框架内接口,所有文件的读取都要通过Resources类来完成,这也正是面向对象的特征之一——封装,降低直接类之间的耦合度。
Resources类方法签名:
Resources类内部提供了一些列的static方法,其中最主要的几个方法签名是:
以上几个不同签名的static方法,提供了文件在内存的不同表现形式,相信每种签名方法的意义,从字面就已经很好理解了。对于加载Configuration.xml而言,最常用的就是:
至于为什么会用这两种方式,后面具体的Configuration.xml解析时会提到。
2.ClassLoaderWrapper类:
Resources类在文件加载的过程中,起到的作用仅仅为Mybatis框架内提供接口,并不参与真正的文件加载操作。
ClassLoaderWrapper则封装了java.lang.ClassLoader这个类,而配置文件的加载是使用ClassLoader完成的。ClassLoader是java提供对外开放的类加载机制,至于ClassLoader的详细使用,可以参照ClassLoader内部实现了解一下,在此不做详细说明。
总结:在Mybatis的内部使用了Resources和ClassLoaderWrapper这两个类封装了文件读取的操作,在内部使用这样的封装完成对文件信息的获取。
以上就Mybatis将Configuration.xml转换成Reader和InputStream的过程。
Mybatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。Mybatis消除了几乎所有的JDBC代码和参数的手工设计以及结果集的检索。Mybatis的前身是ibatis,ibatis是2002年发起的一个开源项目,2010年被谷歌托管,更名为Mybatis,2013年迁移至Github。可能会看本篇文章的人,对于Mybatis都会有一定程度的了解和应用,在此就不做过多介绍了,直接入主题。
Mybatis的入口点是Configuration.xml配置文件加载,Mybatis源码中org.apache.ibatis.io包下负责文件的读取,将本地文件以Reader(字符)或者InputStream(字节)的方式读入内存,接下来我们看一下Mybatis是如何实现Configuration.xml读取的。
在Configuration.xml加载的过程中,Resources、ClassLoaderWrapper等类参与其中,时序图如下,下图只是简单介绍了一下大致流程:
1.Resources类
Resources类是Mybatis为文件读取提供的框架内接口,所有文件的读取都要通过Resources类来完成,这也正是面向对象的特征之一——封装,降低直接类之间的耦合度。
Resources类方法签名:
Resources类内部提供了一些列的static方法,其中最主要的几个方法签名是:
getResourceURL(ClassLoader, String) getResourceAsStream(ClassLoader, String) getResourceAsProperties(ClassLoader, String) getResourceAsReader(ClassLoader, String) getResourceAsFile(ClassLoader, String)
以上几个不同签名的static方法,提供了文件在内存的不同表现形式,相信每种签名方法的意义,从字面就已经很好理解了。对于加载Configuration.xml而言,最常用的就是:
getResourceAsStream(ClassLoader, String) getResourceAsReader(ClassLoader, String)
至于为什么会用这两种方式,后面具体的Configuration.xml解析时会提到。
2.ClassLoaderWrapper类:
Resources类在文件加载的过程中,起到的作用仅仅为Mybatis框架内提供接口,并不参与真正的文件加载操作。
ClassLoaderWrapper则封装了java.lang.ClassLoader这个类,而配置文件的加载是使用ClassLoader完成的。ClassLoader是java提供对外开放的类加载机制,至于ClassLoader的详细使用,可以参照ClassLoader内部实现了解一下,在此不做详细说明。
总结:在Mybatis的内部使用了Resources和ClassLoaderWrapper这两个类封装了文件读取的操作,在内部使用这样的封装完成对文件信息的获取。
以上就Mybatis将Configuration.xml转换成Reader和InputStream的过程。
相关文章推荐
- 从源码安装Mysql/Percona 5.5
- DVI 视频接口图文解析
- IE6不能正常解析CSS文件问题的解决方法及原因分析
- C#自写的一个HTML解析类(类似XElement语法)
- ruby 过程对象 解析
- 浅析Ruby的源代码布局及其编程风格
- C#域名解析简单实现方法
- ruby 类常量 解析
- PHP抓取网页、解析HTML常用的方法总结
- asp.net 抓取网页源码三种实现方法
- 一些javascript一些题目的解析
- JS小游戏之仙剑翻牌源码详解
- Javascript URI 解析介绍
- JS小游戏之宇宙战机源码详解
- jQuery源码分析之jQuery中的循环技巧详解
- 本人自用的global.js库源码分享
- 解析映像劫持技术第1/3页
- java中原码、反码与补码的问题分析
- 解析 ruby 全局变量
- php中使用parse_url()对网址进行解析的实现代码(parse_url详解)