`
gaojingsong
  • 浏览: 1183003 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【Mybatis源码阅读之mappers配置】

阅读更多

  </configuration>

    <mappers>

        <!-- 注册userMapper.xml文件, 

        userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml-->

        <mapper resource="sql.xml"/>

         <mapper class="cn.com.ibatisdemo.ibatisdemo.UserMapper"/>

         <!-- 注册UserMapper映射接口

       <mapper class="me.gacl.mapping.UserMapperI"/>-->

    </mappers>

</configuration>

 

XMLConfigBuilder类主要方法说明

方法一:

  public Configuration parse() {

    if (parsed) {

      throw new BuilderException("Each MapperConfigParser can only be used once.");

    }

    parsed = true;

    parseConfiguration(parser.evalNode("/configuration"));

    return configuration;

  }

 

 

方法二:

private void parseConfiguration(XNode root) {

    try {

      typeAliasesElement(root.evalNode("typeAliases"));

      pluginElement(root.evalNode("plugins"));

      objectFactoryElement(root.evalNode("objectFactory"));

      objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));

      propertiesElement(root.evalNode("properties"));

      settingsElement(root.evalNode("settings"));

      environmentsElement(root.evalNode("environments"));

      typeHandlerElement(root.evalNode("typeHandlers"));

      mapperElement(root.evalNode("mappers"));

    } catch (Exception e) {

      throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);

    }

  }

 

方法三:

 private void mapperElement(XNode parent) throws Exception {

    if (parent != null) {

      for (XNode child : parent.getChildren()) {

        String resource = child.getStringAttribute("resource");

        String url = child.getStringAttribute("url");

        InputStream inputStream;

        if (resource != null && url == null) {

          ErrorContext.instance().resource(resource);

          inputStream = Resources.getResourceAsStream(resource);

          XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, resource, configuration.getSqlFragments());

          mapperParser.parse();

        } else if (url != null && resource == null) {

          ErrorContext.instance().resource(url);

          inputStream = Resources.getUrlAsStream(url);

XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, url, configuration.getSqlFragments());

          mapperParser.parse();

        } else {

          throw new BuilderException("A mapper element may only specify a url or resource, but not both.");

        }

      }

    }

  }

 

说明:此版本mybatis-3.0.4有点古老,新版本是resource/url/classes三者必有其一或者使用package动态扫描,下面这个方法是mybatis-3.4.2的方法

private void mapperElement(XNode parent) throws Exception {

    if (parent != null) {

      for (XNode child : parent.getChildren()) {

        if ("package".equals(child.getName())) {

          String mapperPackage = child.getStringAttribute("name");

          configuration.addMappers(mapperPackage);

        } else {

          String resource = child.getStringAttribute("resource");

          String url = child.getStringAttribute("url");

          String mapperClass = child.getStringAttribute("class");

          if (resource != null && url == null && mapperClass == null) {

            ErrorContext.instance().resource(resource);

            InputStream inputStream = Resources.getResourceAsStream(resource);

            XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, resource, configuration.getSqlFragments());

            mapperParser.parse();

          } else if (resource == null && url != null && mapperClass == null) {

            ErrorContext.instance().resource(url);

            InputStream inputStream = Resources.getUrlAsStream(url);

            XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, url, configuration.getSqlFragments());

            mapperParser.parse();

          } else if (resource == null && url == null && mapperClass != null) {

            Class<?> mapperInterface = Resources.classForName(mapperClass);

            configuration.addMapper(mapperInterface);

          } else {

throw new BuilderException("A mapper element may only specify a url, resource or class, but not more than one.");

          }

        }

      }

    }

  }

 

总结如下:

<mappers>  

   <!-- 通过package元素将会把指定包下面的所有Mapper接口进行注册 -->  

   <package name="com.tiantian.mybatis.mapperinterface"/>  

   <!-- 通过mapper元素的resource属性可以指定一个相对于类路径的Mapper.xml文件 -->  

   <mapper resource="com/tiantian/mybatis/mapper/UserMapper.xml"/>  

   <!-- 通过mapper元素的url属性可以指定一个通过URL请求道的Mapper.xml文件 -->  

   <mapper url="file:///E:/UserMapper.xml"/>  

   <!-- 通过mapper元素的class属性可以指定一个Mapper接口进行注册 -->  

   <mapper class="com.tiantian.mybatis.mapperinterface.UserMapper"/>  

</mappers>  

 当使用mapper元素进行Mapper定义的时候需要注意:mapper的三个属性resource、url和class对于每个mapper元素只能指定一个,要么指定resource属性,要么指定url属性,要么指定class属性,不能都指定,也不能都不指定。

 

 

 

原创不易,欢迎打赏,请认准正确地址,谨防假冒



 

 


0
0
分享到:
评论

相关推荐

    mybatis源码分析思维导图.rar

    MyBatis是一款流行的Java...总的来说,MyBatis源码分析思维导图会涵盖MyBatis的各个关键组件、工作流程、特性以及扩展机制。通过深入学习和理解这些内容,开发者能够更好地利用MyBatis进行数据库操作,并优化其性能。

    mybatis demo

    开发者需要在MyBatis的配置文件(mybatis-config.xml)中配置数据源、事务管理器以及Mappers。 在"mybatis demo"中,"dubbo-lcn-demo-master"可能是一个包含整个项目的压缩包,解压后可能包括以下部分: 1. `pom....

    尚硅谷Mybatis源码和jar包

    "尚硅谷Mybatis源码和jar包"是一个关于Mybatis的学习资源集合,包含源码分析和相关的课程材料,适合对Mybatis感兴趣或者需要深入理解其工作原理的开发者。下面将详细探讨Mybatis的关键知识点。 首先,Mybatis的核心...

    mybatis-3-mybatis-3.4.5 源码

    通过对MyBatis源码的学习,我们可以了解到MyBatis如何解析配置,如何构建SQL,如何处理参数和结果,以及如何利用缓存提高性能。这对于理解和优化MyBatis的应用,甚至开发自己的持久层框架都有极大的帮助。在阅读源码...

    mybatis-3.3.1源码

    2. **Configuration**:这是MyBatis的核心配置类,包含了所有的配置信息,如数据源、Mappers、设置等。SqlSessionFactoryBuilder会根据传入的配置信息创建Configuration实例。 3. **SqlSessionFactory**:...

    mybatis-3-mybatis-3.5.7.zip源码

    1. **配置文件解析**:MyBatis的核心配置文件`mybatis-config.xml`定义了数据源、事务管理器、Mappers等关键元素。通过`XMLConfigBuilder`解析这些配置,构建出`Configuration`对象,它是整个MyBatis框架的中心。 2...

    myBatis3.2.2带源码和文档

    `mybatis-3.2.2-sources.jar` 包含了MyBatis的源代码,开发者可以通过阅读源码了解MyBatis内部的工作原理,如SqlSession、Executor、Mapper接口等核心组件的实现,以及动态SQL的处理方式。这对于深入学习MyBatis,...

    Mybatis源码分析.md

    ### Mybatis源码分析 #### 1. 解析配置文件,创建SQLSessionFactory 在MyBatis框架中,创建`SQLSessionFactory`是初始化整个框架的重要步骤之一。这一过程涉及到了配置文件的读取与解析,以及如何构建出可以用于...

    Mybatis源码分析-上课笔记1

    在分析MyBatis源码时,可以采用宏观和微观两种视角。宏观上理解整个框架的架构和流程,微观上深入到具体的类和方法,通过阅读和调试代码来理解其实现细节。同时,绘制流程图或UML图能帮助更好地梳理组件间的交互。 ...

    Mybatis源码讲解,面向秋招

    - 加载配置:Mybatis 首先加载配置文件,解析出数据源、事务管理器、Mappers 等信息。 - 创建 SqlSessionFactory:基于配置信息创建 SqlSessionFactory,它是创建 SQLSession 的工厂。 - 获取 SQLSession:通过 ...

    mybatis-3-mybatis-3.2.6

    1. **配置解析**:MyBatis的配置文件(mybatis-config.xml)被解析成Configration对象,这个对象包含了所有的全局配置信息,如数据源、事务管理器、Mappers等。解析过程主要由XMLConfigBuilder类完成。 2. **...

    mybatis3源码

    - **Configuration**: 包含所有配置信息,如mappers、typeAliases、objectFactory等,是MyBatis的核心。 - **SqlSessionManager**: SqlSession的管理器,负责SqlSession的生命周期,如打开、关闭和提交/回滚事务。...

    mybatis两天视频教程+源码+笔记

    ### MyBatis两天视频教程+源码+笔记 #### 一、MyBatis简介与应用场景 **MyBatis**是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集...

    mybatis-3-config.dtd mybatis-3-mapper.dtd

    它是配置文件的根元素,包含了`properties`(用于加载外部属性文件)、`settings`(系统设置)、`typeAliases`(类型别名)、`objectFactory`(对象工厂)、`plugins`(插件)、`mappers`(映射器)等子元素。...

    mybatis开发环境包和源码、提示功能文件包大集合

    通过这个文件,开发者可以了解MyBatis全局配置的正确格式,包括数据源、事务管理器、Mappers等的配置。 在实际使用中,开发者首先需要配置MyBatis的全局配置文件mybatis-config.xml,然后创建Mapper接口和对应的XML...

    Mybatis XML配置信息说明

    2. **映射器(Mappers)配置**:映射器文件是Mybatis的核心,它们定义了SQL语句和Java对象之间的映射关系。你可以通过类路径、资源URL或者完全限定的类名来引用映射器文件。 ```xml &lt;mappers&gt; &lt;/mappers&gt; ``` ...

    Mybatis系列学习源码

    通过这个源码学习,你可以了解到如何配置Mybatis,如何编写Mapper接口和XML文件,以及如何在实际项目中应用Mybatis进行数据库操作。同时,还可以结合提供的博客链接...

    spring-mybatis-2.0.0源码

    2. 配置MyBatis:创建MyBatis的配置文件(mybatis-config.xml),定义数据源、事务管理器、Mappers等信息。 3. 创建SqlSessionFactoryBean:在Spring的配置文件中,创建一个`SqlSessionFactoryBean`,通过`...

    mybatis3.4.1jar包及框架源码

    MyBatis是一个流行的Java持久层框架,它简化了数据库与Java应用程序之间的交互,提供...源码阅读可以让我们深入理解框架如何处理SQL执行、参数绑定、结果映射等核心任务,从而更好地利用MyBatis优化我们的数据库操作。

    Mybatis配置文件深入开源架构源码2021.pdf

    5. **Mybatis源码分析** - **SqlSessionFactoryBuilder**:用于构建SqlSessionFactory的工具类,`build()`方法接收一个InputStream,解析SqlMapConfig.xml,生成SqlSessionFactory实例。 - **SqlSessionFactory**...

Global site tag (gtag.js) - Google Analytics