Mybatis 代码流程及实现原理解析(一)
来源:互联网 发布:淘宝店铺买模版视频 编辑:程序博客网 时间:2024/06/10 02:52
Mybatis 主要涉及的配置文件:
1. sqlMapConfig.xml:这是一个主控文件,对于mybatis的全局配置。
2. 具体的mapper xml,这个文件包含具体的sql片段,parameters,result的配置。
对于第一个配置文件的处理,主要是在这个SqlSessionFactoryBuilder的这个方法进行处理:
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. } } }这个方法有一些多态的形参, 主要是一些额外的参数和不同的文件流形式。
看下这个parse的具体实现:
public Configuration parse() { if (parsed) { throw new BuilderException("Each XMLConfigBuilder can only be used once."); } parsed = true; parseConfiguration(parser.evalNode("/configuration")); return configuration; } private void parseConfiguration(XNode root) { try { propertiesElement(root.evalNode("properties")); //issue #117 read properties first typeAliasesElement(root.evalNode("typeAliases")); pluginElement(root.evalNode("plugins")); objectFactoryElement(root.evalNode("objectFactory")); objectWrapperFactoryElement(root.evalNode("objectWrapperFactory")); settingsElement(root.evalNode("settings")); environmentsElement(root.evalNode("environments")); // read it after objectFactory and objectWrapperFactory issue #631 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); } }
从上面方法可以看出:
1. Configuration.java 是mybatis中有关配置的一个总控类, 所以从配置文件中解析出来的元素都会成为这个类的一部分。
xml 样例:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><properties resource="org/mybatis/example/config.properties"> <property name="username" value="dev_user"/> <property name="password" value="F2Fa3!33TYyg"/></properties><typeAliases> <typeAlias alias="Author" type="domain.blog.Author"/></typeAliases> <mappers> <!-- <mapper resource="com/skoyou/domain/User.xml"/> --> <mapper resource="com/skoyou/mapper/User.xml"/> </mappers></configuration>
2. parseConfiguration方法包含对配置文件中每个节点的解析。下面是官方文档列出的所有支持的节点名称.具体地址可参考:http://mybatis.github.io/mybatis-3/zh/configuration.html
下片主要看下parseConfiguration方法中主要字方法的解析过程。重点会在mapper节点。
- Mybatis 代码流程及实现原理解析(一)
- Mybatis 代码流程及实现原理解析(二)
- Mybatis 代码流程及实现原理解析(三)
- Mybatis实现原理/工作流程
- Mybatis使用及原理解析
- Mybatis使用及原理解析
- Mybatis使用及原理解析
- DNS原理及解析流程
- Mybatis实现原理深入解析
- Mybatis实现原理深入解析
- mybatis实现原理及配置
- Verilog实现同步整形电路的原理及代码解析
- Verilog实现同步整形电路的原理及代码解析
- 机器学习逻辑回归:原理解析及代码实现
- MyBatis学习一 mybatis的原理,操作流程
- BOW 原理及代码解析
- BOW 原理及代码解析
- C#实现UDP打洞 原理及代码(一)
- 请问jquery mobile开发测试工具,该选择什么?
- 关于C语言中日期 计算问题
- 程序员如何掌握计算机英语
- Construct Binary Tree from Preorder and Inorder Traversal
- Android获取屏幕的大小与密度
- Mybatis 代码流程及实现原理解析(一)
- Linux共享内存编程实例
- 自动批量解决本地安装rpm包的dependencies问题
- Construct Binary Tree from Inorder and Postorder Traversal
- 大数加法(仅能处理正数)
- 设计模式分类
- Linux下安装Oracle11g服务器 建立数据库 配置监听
- android 自定义对话框宽不能占满父layout的解决办法
- 二分查找,希尔排序和快速排序