`
skoyou
  • 浏览: 5810 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

Mybatis 代码流程及实现原理解析(一)

 
阅读更多

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节点。

分享到:
评论

相关推荐

    基于ssm+vue高校专业信息管理系统设计与实现+(源码+部署说明+演示视频+源码介绍).zip

    这是一个基于SSM(Spring、SpringMVC、MyBatis)框架和Vue前端技术的高校专业信息管理系统的完整项目资源包。该项目主要用于管理高校的专业信息,包括专业的添加、修改、删除、查询等功能。 项目源码包含了后端的...

    基于Javaweb实现的校园疫情防控管理系统.zip

    代码与实现细节:提供了完整的项目源代码,并针对关键部分进行了详细的注释和解析。 文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目...

    校园订餐系统,基于javaweb+SSM+maven实现.zip

    代码与实现细节:提供了完整的项目源代码,并针对关键部分进行了详细的注释和解析。 文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目...

    基于JavaWeb的医院挂号管理系统,使用SSM框架+MySQL实现.zip

    代码与实现细节:提供了完整的项目源代码,并针对关键部分进行了详细的注释和解析。 文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目...

    一个运用了MVC模式及JavaWeb三大框架的注册和登录系统.zip

    代码与实现细节:提供了完整的项目源代码,并针对关键部分进行了详细的注释和解析。 文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目...

    J2EE项目系列(一)--运用MVC模式及JavaWeb三层框架的学生管理系统。.zip

    代码与实现细节:提供了完整的项目源代码,并针对关键部分进行了详细的注释和解析。 文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目...

    基于javaweb的仿照百度网盘的小型云盘系统.zip

    代码与实现细节:提供了完整的项目源代码,并针对关键部分进行了详细的注释和解析。 文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目...

    javaweb项目:校园宿舍管理系统.zip

    代码与实现细节:提供了完整的项目源代码,并针对关键部分进行了详细的注释和解析。 文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目...

    基于JavaWeb开发的图书管理系统.zip

    代码与实现细节:提供了完整的项目源代码,并针对关键部分进行了详细的注释和解析。 文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目...

    JavaWeb图书管理系统(MVC框架).zip

    代码与实现细节:提供了完整的项目源代码,并针对关键部分进行了详细的注释和解析。 文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目...

    停车场管理系统 javaweb 源码+文档.zip

    代码与实现细节:提供了完整的项目源代码,并针对关键部分进行了详细的注释和解析。 文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目...

    javaweb在线考试系统 学生+教师+管理员.zip

    代码与实现细节:提供了完整的项目源代码,并针对关键部分进行了详细的注释和解析。 文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目...

    javaweb学生成绩管理系统.zip

    代码与实现细节:提供了完整的项目源代码,并针对关键部分进行了详细的注释和解析。 文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目...

    B站【遇见狂神说】JavaWeb项目【超市订单管理系统】.zip

    代码与实现细节:提供了完整的项目源代码,并针对关键部分进行了详细的注释和解析。 文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目...

    基于JavaWeb的个人博客系统 (毕设),本系统基于JavaWeb进行开发

    代码与实现细节:提供了完整的项目源代码,并针对关键部分进行了详细的注释和解析。 文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目...

    简陋的JavaWeb学生公寓管理系统 Servlet+JSP+MySql+Layui.zip

    代码与实现细节:提供了完整的项目源代码,并针对关键部分进行了详细的注释和解析。 文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目...

    JavaWeb,图书管理系统.zip

    代码与实现细节:提供了完整的项目源代码,并针对关键部分进行了详细的注释和解析。 文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目...

    javaweb管理系统.zip

    代码与实现细节:提供了完整的项目源代码,并针对关键部分进行了详细的注释和解析。 文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目...

    教材订购系统,JavaWeb大作业.zip

    代码与实现细节:提供了完整的项目源代码,并针对关键部分进行了详细的注释和解析。 文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目...

    javaweb学生信息管理系统.zip

    代码与实现细节:提供了完整的项目源代码,并针对关键部分进行了详细的注释和解析。 文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目...

Global site tag (gtag.js) - Google Analytics