上篇文章《深入浅出Mybatis系列(一)---Mybatis入门》, 写了一个Demo简单体现了一下Mybatis的流程。本次,将简单介绍一下Mybatis的配置文件:

上次例子中,我们以 SqlSessionFactoryBuilder 去创建 SqlSessionFactory,  那么,我们就先从SqlSessionFactoryBuilder入手, 咱们先看看源码是怎么实现的:

SqlSessionFactoryBuilder源码片段:

 
 1 public class SqlSessionFactoryBuilder {
2
3 //Reader读取mybatis配置文件,传入构造方法
4 //除了Reader外,其实还有对应的inputStream作为参数的构造方法,
5 //这也体现了mybatis配置的灵活性
6 public SqlSessionFactory build(Reader reader) {
7 return build(reader, null, null);
8 }
9
10 public SqlSessionFactory build(Reader reader, String environment) {
11 return build(reader, environment, null);
12 }
13
14 //mybatis配置文件 + properties, 此时mybatis配置文件中可以不配置properties,也能使用${}形式
15 public SqlSessionFactory build(Reader reader, Properties properties) {
16 return build(reader, null, properties);
17 }
18
19 //通过XMLConfigBuilder解析mybatis配置,然后创建SqlSessionFactory对象
20 public SqlSessionFactory build(Reader reader, String environment, Properties properties) {
21 try {
22 XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
23 //下面看看这个方法的源码
24 return build(parser.parse());
25 } catch (Exception e) {
26 throw ExceptionFactory.wrapException("Error building SqlSession.", e);
27 } finally {
28 ErrorContext.instance().reset();
29 try {
30 reader.close();
31 } catch (IOException e) {
32 // Intentionally ignore. Prefer previous error.
33 }
34 }
35 }
36
37 public SqlSessionFactory build(Configuration config) {
38 return new DefaultSqlSessionFactory(config);
39 }
40
41 }
 

通过源码,我们可以看到SqlSessionFactoryBuilder 通过XMLConfigBuilder 去解析我们传入的mybatis的配置文件, 下面就接着看看 XMLConfigBuilder 部分源码:

 
 1 /**
2 * mybatis 配置文件解析
3 */
4 public class XMLConfigBuilder extends BaseBuilder {
5 public XMLConfigBuilder(InputStream inputStream, String environment, Properties props) {
6 this(new XPathParser(inputStream, true, props, new XMLMapperEntityResolver()), environment, props);
7 }
8
9 private XMLConfigBuilder(XPathParser parser, String environment, Properties props) {
10 super(new Configuration());
11 ErrorContext.instance().resource("SQL Mapper Configuration");
12 this.configuration.setVariables(props);
13 this.parsed = false;
14 this.environment = environment;
15 this.parser = parser;
16 }
17
18 //外部调用此方法对mybatis配置文件进行解析
19 public Configuration parse() {
20 if (parsed) {
21 throw new BuilderException("Each XMLConfigBuilder can only be used once.");
22 }
23 parsed = true;
24 //从根节点configuration
25 parseConfiguration(parser.evalNode("/configuration"));
26 return configuration;
27 }
28
29 //此方法就是解析configuration节点下的子节点
30 //由此也可看出,我们在configuration下面能配置的节点为以下10个节点
31 private void parseConfiguration(XNode root) {
32 try {
33 propertiesElement(root.evalNode("properties")); //issue #117 read properties first
34 typeAliasesElement(root.evalNode("typeAliases"));
35 pluginElement(root.evalNode("plugins"));
36 objectFactoryElement(root.evalNode("objectFactory"));
37 objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
38 settingsElement(root.evalNode("settings"));
39 environmentsElement(root.evalNode("environments")); // read it after objectFactory and objectWrapperFactory issue #631
40 databaseIdProviderElement(root.evalNode("databaseIdProvider"));
41 typeHandlerElement(root.evalNode("typeHandlers"));
42 mapperElement(root.evalNode("mappers"));
43 } catch (Exception e) {
44 throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);
45 }
46 }
47 }

通过以上源码,我们就能看出,在mybatis的配置文件中:

1. configuration节点为根节点。

2. 在configuration节点之下,我们可以配置10个子节点, 分别为:properties、typeAliases、plugins、objectFactory、objectWrapperFactory、settings、environments、databaseIdProvider、typeHandlers、mappers。

本篇文章就先只介绍这些内容,接下来的文章将依次分析解析这个10个节点中比较重要的几个节点的源码,看看在解析这些节点的时候,到底做了些什么。

深入浅出Mybatis系列(二)---配置简介(mybatis源码篇)[转]的更多相关文章

  1. 深入浅出Mybatis系列二-配置简介(mybatis源码篇)

    注:本文转载自南轲梦 注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 上篇文章<深入浅出Mybatis系列(一)---Mybatis入门>, ...

  2. Spring源码系列(二)--bean组件的源码分析

    简介 spring-bean 组件是 Spring IoC 的核心,我们可以使用它的 beanFactory 来获取所需的对象,对象的实例化.属性装配和初始化等都可以交给 spring 来管理. 本文 ...

  3. Mybatis系列(二):优化MyBatis配置文件中的配置和解决字段名与实体类属性名不相同的冲突

    原文链接:http://www.cnblogs.com/xdp-gacl/p/4264301.html     http://www.cnblogs.com/xdp-gacl/p/4264425.ht ...

  4. shiro源码篇 - 疑问解答与系列总结,你值得拥有

    前言 开心一刻 小明的朋友骨折了,小明去他家里看他.他老婆很细心的为他换药,敷药,然后出去买菜.小明满脸羡慕地说:你特么真幸福啊,你老婆对你那么好!朋友哭得稀里哗啦的说:兄弟你别说了,我幸福个锤子,就 ...

  5. 深入浅出Mybatis系列(二)---配置简介(mybatis源码篇)

    上篇文章<深入浅出Mybatis系列(一)---Mybatis入门>, 写了一个Demo简单体现了一下Mybatis的流程.本次,将简单介绍一下Mybatis的配置文件: 上次例子中,我们 ...

  6. 深入浅出Mybatis系列(五)---TypeHandler简介及配置(mybatis源码篇)

    上篇文章<深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)>为大家介绍了mybatis中别名的使用,以及其源码.本篇将为大家介绍TypeH ...

  7. 深入浅出Mybatis系列五-TypeHandler简介及配置(mybatis源码篇)

    注:本文转载自南轲梦 注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 上篇文章<深入浅出Mybatis系列(四)---配置详解之typeAliase ...

  8. 深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇)

    上篇文章<深入浅出Mybatis系列(二)---配置简介(mybatis源码篇)>我们通过对mybatis源码的简单分析,可看出,在mybatis配置文件中,在configuration根 ...

  9. 深入浅出Mybatis系列三-配置详解之properties与environments(mybatis源码篇)

    注:本文转载自南轲梦 注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 上篇文章<深入浅出Mybatis系列(二)---配置简介(mybatis源码篇 ...

随机推荐

  1. markdown转为pdf文件

    要求: 把.md格式转为.pdf格式,并批量处理,最后将多个pdf文件合并为一个pdf并以文件名作为书签名 解决思路: 1.md格式的markdown文件转为html 为了将 md 格式转换成 htm ...

  2. BZOJ2152 聪明可可 点分治

    题意传送门 思路:基本的点分治思路,num数组记录从u点开始路径长度分别为1或者2或者3的路径长度(取模3意义下),然后做一个简单的容斥就好了. 为了避免计数的麻烦,<u,u>这样的点单独 ...

  3. Android欢迎页短暂白屏

    在style中application theme下添加以下代码: <item name="android:windowIsTranslucent" >true</ ...

  4. java 堆排,优先级队列,归并排序

    堆排 堆排是基于二叉树而得来的 例如:对一个数组 可以转为二叉树:       二叉树特性父节点为 i ,  左叶子节点为2i+1:右叶子节点为2i+2; 步骤分解: 1. 先从第一个非叶子节点(即下 ...

  5. 应用上云新模式,Aliware 全家桶亮相杭州云栖大会

    全面上云带来的变化,不仅是上云企业数量上的攀升,也是企业对云的使用方式的转变,越来越多的企业用户不仅将云作为一种弹性资源,更是开始在云上部署架构和应用,借助 Serverless 等技术,开发人员只需 ...

  6. 带撤销贪心——cf1148F好题

    自己不会做,看了题解懂得 从最高位依次往低位遍历,因为偶数个1是不改变符号的,所以带个贪心即可(可以看成是带撤销的..) 每轮循环用sum记录该位选择1可以减少的值 如果是负数,就不要改成1 如果是正 ...

  7. 查看linux的登录日志

    查看linux的登录日志 1. lastlog 列出所有用户最近登录的信息  lastlog引用的是/var/log/lastlog文件中的信息,包括login-name.port.last logi ...

  8. System.Web.HttpCookie.cs

    ylbtech-System.Web.HttpCookie.cs 1.程序集 System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken= ...

  9. idea运行tomcat,控制台中文乱码

    加入参数:-Dfile.encoding=UTF-8

  10. 《DSP using MATLAB》Problem 8.37

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...