我们通过对mybatis源码的简单分析,可看出,在mybatis配置文件中,在configuration根节点下面,可配置properties、typeAliases、plugins、objectFactory、objectWrapperFactory、settings、environments、databaseIdProvider、typeHandlers、mappers这些节点。那么本次,就会先介绍properties节点和environments节点。

  为了让大家能够更好地阅读mybatis源码,我先简单的给大家示例一下properties的使用方法。  

 1 <configuration>2 <!-- 方法一: 从外部指定properties配置文件, 除了使用resource属性指定外,还可通过url属性指定url  3   <properties resource="dbConfig.properties"></properties> 4   -->5   <!-- 方法二: 直接配置为xml -->6   <properties>7       <property name="driver" value="com.mysql.jdbc.Driver"/>8       <property name="url" value="jdbc:mysql://localhost:3306/test1"/>9       <property name="username" value="root"/>
10       <property name="password" value="root"/>
11   </properties>

  那么,我要是 两种方法都同时用了,那么哪种方法优先?

  当以上两种方法都xml配置优先, 外部指定properties配置其次。至于为什么,接下来的源码分析会提到,请留意一下下载地址  。

  再看一下envirements元素节点的使用方法吧:

<environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><!--如果上面没有指定数据库配置的properties文件,那么此处可以这样直接配置 <property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test1"/><property name="username" value="root"/><property name="password" value="root"/>         --><!-- 上面指定了数据库配置文件, 配置文件里面也是对应的这四个属性 --><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment><!-- 我再指定一个environment --><environment id="test"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><!-- 与上面的url不一样 --><property name="url" value="jdbc:mysql://localhost:3306/demo"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments>

  environments元素节点可以配置多个environment子节点, 怎么理解呢?

  假如我们系统的开发环境和正式环境所用的数据库不一样(这是肯定的), 那么可以设置两个environment, 两个id分别对应开发环境(dev)和正式环境(final),那么通过配置environments的default属性就能选择对应的environment了, 例如,我将environments的deault属性的值配置为dev, 那么就会选择dev的environment。 至于这个是怎么实现的, 下面源码就会讲。

  好啦,上面简单给大家介绍了一下properties 和 environments 的配置, 接下来就正式开始看源码了:

  上次我们说过mybatis 是通过XMLConfigBuilder这个类在解析mybatis配置文件的,那么本次就接着看看XMLConfigBuilder对于properties和environments的解析:

XMLConfigBuilder:

  通过以上对mybatis源码的解读,相信大家对mybatis的配置又有了一个深入的认识。

  还有一个问题, 上面我们看到,在配置dataSource的时候使用了 ${driver} 这种表达式, 这种形式是怎么解析的?其实,是通过PropertyParser这个类解析:

PropertyParser:

/*** 这个类解析${}这种形式的表达式 */public class PropertyParser {  public static String parse(String string, Properties variables) {VariableTokenHandler handler = new VariableTokenHandler(variables);GenericTokenParser parser = new GenericTokenParser("${", "}", handler);    return parser.parse(string);}  private static class VariableTokenHandler implements TokenHandler {    private Properties variables;    public VariableTokenHandler(Properties variables) {      this.variables = variables;}    public String handleToken(String content) {      if (variables != null && variables.containsKey(content)) {        return variables.getProperty(content);}      return "${" + content + "}";}}
}

好啦,以上就是对于properties 和 environments元素节点的分析,比较重要的都在对于源码的注释中标出。本次文章到此结束,接下来的文章会继续分析其他节点的配置。

转载于:https://blog.51cto.com/11551334/1769992

深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇)相关推荐

  1. 深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)

    上篇文章<深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇)> 介绍了properties与environments, ...

  2. BMP180气压传感器详解与示例(STM32 附带源码)

    BMP180气压传感器详解与示例(STM32 附带源码) 简介 工作模式 校准数值 测试流程 第一步:微处理器读取校准数值 第二步:读取温度.气压初始值 第三步:计算温度.气压 第四步:计算海拔高度 ...

  3. Java API源码在哪里找_详解查看JAVA API及JAVA源码的方法

    在java的日常学习中,我们有时候会需要看java的api说明,或者是查看java的源码,使我们更好的了解java,接下来我就来说说如何查看java的api以及java源码 对于java的api,一般 ...

  4. vue 源码详解(零):Vue 源码流程图

    vue 源码详解(零):Vue 源码流程图 最近在研究 Vue 的源码, 整理博客, 结果想到的.看到的内容实在是太多了, 不知道从何写起, 故整理了一个大致的流程图,根据这个顺序进行一一整理. 为了 ...

  5. webpack手摸手学习系列之配置详解的 entry、output、module、resolve、devServer 和 optimization

    一.webpack 配置详解之 entry 创建空文件夹,通过 npm init 命令初始化 package.json 文件,通过 npm install webpack webpack-cli -g ...

  6. 《CDN 之我见》系列三:详解篇(网络优化)

    摘要: 本文作者:白金,<CDN 之我见>是一个系列文章,共由三个篇章组成,分为"原理篇"."详解篇"和"陨坑篇".本篇章属于& ...

  7. Spring、Spring MVC、MyBatis整合文件配置详解

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. web.xml的配置 web.xml应该是整个项目最重要的配置文件了,不过servlet3.0中已经 ...

  8. mybatis的resultMap配置详解

    1.mybatis的实体类继承 参考资料: 1.mybatis中实体类,po类继承另一个po类的情况 2.mybatis中resultMap配置细则 实体类的继承的作用是:可以通过继承减少代码在实体类 ...

  9. java socket 握手_TCP建立连接三次握手过程详解(wireshark截图、java socket源码)

    TCP(Transmission Control Protocol传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议. 三次握手协议建立连接图 握手过程步骤如下(配wireshark分 ...

最新文章

  1. 华为云客户端_华为云新一代S6云服务器缘何深受中小企业青睐?
  2. java代码实现python2中aes加密经历
  3. python中常用的推导(字典推导和列表推导)
  4. Maven中使用tomcat:run出现错误org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException
  5. 对用2遍dfs求有向图强连通分量的理解
  6. 三月份总结(后台规范+面试)
  7. 极大似然函数求解_极大似然估计详解
  8. JDBC案例-用java操作数据库增删改查
  9. java 校验d盘是否存在_从零学java笔录-第2篇 验证jdk是否安装成功
  10. 教教大家Win10怎么看处理器是几核
  11. 负压式爬壁机器人_负压吸附式爬壁机器人的体重设计
  12. Syntax error, annotations are only available if source level is 1.5 or greater
  13. 【JAVASE】IO流基础
  14. Cesium中实时根据鼠标的位置显示经度,纬度,视角高度以及海拔高度
  15. 面向对象之继承、查找顺序
  16. redis从db0迁移数据至db1
  17. bzoj2876: [Noi2012]骑行川藏 :拉格朗日乘数法
  18. nexus私服安装包
  19. linux查看riak版本,Riak学习(1):Linux Centos 下安装 Riak 服务
  20. 一款简单的本地音乐播放器,界面美观、包括主题切换、歌单管理等等

热门文章

  1. 【原创】ASP.NET C# 压缩和解压缩文件、文件夹函数(测试通过)
  2. scrapy配置文件操作核心API解读
  3. 教你辨别36k纯数据科学家
  4. message/maillog日志提示磁盘innode、io错误等,扫描磁盘很多坏道
  5. LeetCode Weekly Contest 27
  6. 什么是core dump linux下用core和gdb查询出现段错误的地方
  7. POJ 1014: Dividing
  8. 文件上传利器SWFUpload使用指南
  9. ASP.NET简化编辑界面 V3
  10. _disable_logging 对于归档数据库的影响