:本文转载自南轲梦

注:博主 Chloneda个人博客 | 博客园 | Github | Gitee | 知乎

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

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

SqlSessionFactoryBuilder源码

public class SqlSessionFactoryBuilder {

  /**
* Reader读取mybatis配置文件,传入构造方法
* 除了Reader外,其实还有对应的inputStream作为参数的构造方法,
* 这也体现了mybatis配置的灵活性
*/
public SqlSessionFactory build(Reader reader) {
return build(reader, null, null);
} public SqlSessionFactory build(Reader reader, String environment) {
return build(reader, environment, null);
} //mybatis配置文件 + properties, 此时mybatis配置文件中可以不配置properties,也能使用${}形式
public SqlSessionFactory build(Reader reader, Properties properties) {
return build(reader, null, properties);
} //通过XMLConfigBuilder解析mybatis配置,然后创建SqlSessionFactory对象
public SqlSessionFactory build(Reader reader
, String environment
, Properties properties) {
try {
XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
//下面看看这个方法的源码
return build(parser.parse());
} catch (Exception e) {
throw ExceptionFactory.wrapException("Error building SqlSession.", e);
} finally {
ErrorContext.instance().reset();
try {
reader.close();
} catch (IOException e) {
// Intentionally ignore. Prefer previous error.
}
}
} public SqlSessionFactory build(Configuration config) {
return new DefaultSqlSessionFactory(config);
} }

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

XMLConfigBuilder源码

/**
* mybatis 配置文件解析
*/
public class XMLConfigBuilder extends BaseBuilder {
public XMLConfigBuilder(InputStream inputStream,String environment,Properties props){
this(new XPathParser(inputStream, true, props
, new XMLMapperEntityResolver()), environment, props);
} 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;
} //外部调用此方法对mybatis配置文件进行解析
public Configuration parse() {
if (parsed) {
throw new BuilderException("Each XMLConfigBuilder can only be used once.");
}
parsed = true;
//从根节点configuration
parseConfiguration(parser.evalNode("/configuration"));
return configuration;
} //此方法就是解析configuration节点下的子节点
//由此也可看出,我们在configuration下面能配置的节点为以下10个节点
private void parseConfiguration(XNode root) {
try {
    //issue #117 read properties first
propertiesElement(root.evalNode("properties"));
typeAliasesElement(root.evalNode("typeAliases"));
pluginElement(root.evalNode("plugins"));
objectFactoryElement(root.evalNode("objectFactory"));
objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
settingsElement(root.evalNode("settings"));     // read it after objectFactory and objectWrapperFactory issue #631
environmentsElement(root.evalNode("environments"));
databaseIdProviderElement(root.evalNode("databaseIdProvider"));
typeHandlerElement(root.evalNode("typeHandlers"));
mapperElement(root.evalNode("mappers"));
} catch (Exception e) {
throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: "
+ e, e);
}
}
}

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

  1. configuration节点为根节点。

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

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


最新文章

  1. 【开源】知乎日报UWP 更新
  2. 廖雪峰js教程笔记14 file文件操作
  3. 高级Linux SA需要会做的事情
  4. RealTimePerformanceDemoView
  5. 关于MATHAPP的测试
  6. hdu1561 树形dp + 背包
  7. Viewpaer+fragment
  8. 嵌入式LINUX入门到实践(二)
  9. Linux下去掉^M的方法
  10. datazen Active Directory AD 配置
  11. location对象位置操作,进行跳转
  12. float和double数据类型的声明,转换和计算
  13. TCP/IP 网络编程(六)
  14. 脑洞大开--一条项目中常用的linux命令引发的经典算法题
  15. springboot用thymeleaf模板的paginate分页
  16. hiredis的安装
  17. JS兼容问题
  18. 01++ Bookshelf 2
  19. [原创]Burp Suite web应用程序渗透测试神器
  20. 【LeetCode】7. 整数反转python3

热门文章

  1. 【Java并发工具类】Java并发容器
  2. CentOS7.3下yum安装MariaDB10.3.12并指定utf8字符集
  3. React之深入了解虚拟DOM
  4. js—二进制中1的个数
  5. 一招教你轻松使用数据可视化BI软件创建旅游消费数据可视化大屏
  6. Java @Deprecated Annotation(注解)
  7. Caliburn.Micro框架之Action Convertions
  8. Cesium动态绘制实体(点、标注、面、线、圆、矩形)
  9. Git安装与配置,以及pycharm提交代码到github
  10. leetcode腾讯精选练习之旋转链表(四)