Mybatis对mapper的加载流程深入讲解

下面是对"Mybatis对mapper的加载流程深入讲解"的详细讲解:

1、Mybatis mapper的概念

Mapper是Mybatis的一个核心概念,是连接Mybatis和JDBC的重要桥梁。Mybatis将SQL语句和映射规则分离出来,提供了mapper对SQL语句的注解和XML配置文件的支持,使得我们可以在mapper中定义SQL和对应的Java映射。

2、Mybatis mapper的加载流程

Mybatis将SQL语句和映射规则分离出来,开发者可以通过XML配置文件或Java注解的形式定义mapper文件。在应用程序中,mapper文件需要被加载进Mybatis框架中,这个过程就是Mybatis mapper的加载流程。下面是Mybatis mapper的加载流程:

  1. 配置文件加载(mybatis-config.xml或configLocation)
    Mybatis在启动的时候首先需要加载mybatis-config.xml或configLocation指定的配置文件,从配置文件中获取相关的信息,比如数据源、类型别名、插件、mapper文件等。
  2. 映射文件加载(mapper.xml)
    Mybatis框架会扫描mapper.xml配置文件中的所有namespace,将namespace和映射器解析到内存中,后续将基于这些映射器来执行SQL语句。
  3. Mapper注册(MapperRegistry)
    加载mapper.xml文件的时候,Mybatis框架根据mapper.xml文件中的namespace来生成一个MapperProxyFactory工厂类,并将MapperProxyFactory工厂类注册到MapperFactoryRegistry中。Mybatis框架会将所有MapperProxyFactory工厂类放在MapperFactoryRegistry中,以便后续进行调用。
  4. Mapper接口获取(MapperRegistry)
    在MapperRegistry中根据Mapper接口的class对象来获取对应的MapperProxyFactory工厂类,如果没有则新建一个MapperProxyFactory工厂类。
  5. Mapper代理对象获取(SqlSession.getMapper)
    在获取Mapper接口的代理对象的时候,Mybatis框架会根据Mapper接口的class对象构造父接口InvocationHandler的实现类MapperProxy,并使用JDK的动态代理技术构造Mapper接口的代理对象,并返回代理对象给应用程序。

3、Mybatis mapper加载流程示例

<!--mapper.xml配置文件-->
<mapper namespace="com.example.UserMapper">
    <select id="findUserById" parameterType="int" resultMap="userResultMap">
        select * from user where id = #{id}
    </select>
</mapper>
//用户Mapper接口
public interface UserMapper {
    User findUserById(int id);
}
//应用程序
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.findById(1);

以上代码演示了Mybatis mapper的加载过程:

  1. 加载mapper.xml文件的namespace为"com.example.UserMapper"的mapper配置。
  2. 将mapper配置文件中的SQL语句解析成为相应的MappedStatement对象,并注册到Configuration中。
  3. 创建Mapper接口的代理对象,并将该代理对象返回给应用程序。

再看一个注解的例子:

@Mapper
public interface UserMapper {
    @Select("select * from user where id = #{id}")
    User findById(@Param("id") int id);
}

在使用注解的方式时,Mybatis mapper的加载过程大致如下:

  1. Mybatis框架扫描应用程序中所有的Mapper接口注解,将所有包含@Mapper注解的Mapper接口生成对应的MapperProxyFactory工厂类。
  2. Mybatis框架将所有MapperProxyFactory工厂类放在MapperFactoryRegistry中,以便后续进行调用。
  3. 通过SqlSession.getMapper方法获取Mapper接口的代理对象时,Mybatis框架会根据Mapper接口的class对象构造父接口InvocationHandler的实现类MapperProxy,并使用JDK的动态代理技术构造Mapper接口的代理对象,并返回代理对象给应用程序。

总结:Mybatis mapper的加载流程是非常复杂的一项工作,需要将XML配置文件和Java注解里的mapper文件中的SQL语句解析成MappedStatement对象,并注册到Configuration中。这样就可以通过SqlSession.getMapper获取到Mapper接口的代理对象,并可以调用mapper中定义的方法了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mybatis对mapper的加载流程深入讲解 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Spring 整合 MyBatis的实现步骤

    当我们要在Spring中使用MyBatis时,我们需要完成以下几个步骤。在这里,我将详细讲解整合步骤及相关示例。 1.添加依赖项 第一步是将必要的依赖项添加到项目中。我们需要添加Spring和MyBatis的依赖项,以及与他们相关的数据库驱动。这里我给出一个示例的pom.xml文件。 <dependencies> <!– Spring -…

    Java 2023年6月3日
    00
  • Hibernate+Spring+Struts扩展Struts

    本文将为大家介绍如何在一个Web应用中使用Hibernate、Spring和Struts三个框架,并扩展Struts框架,以实现一个完整的MVC架构。下面我们将一步步讲解如何搭建这个Web应用。 环境准备 在开始之前,请确保已经安装了以下环境: JDK 1.8 Tomcat 8.5 MySQL 5.x 创建工程 在Eclipse中创建一个动态Web工程,命名…

    Java 2023年6月15日
    00
  • Java基础之详细总结五种常用运算符

    Java基础之详细总结五种常用运算符 Java中常见的运算符有很多种,包括算术运算符、关系运算符、逻辑运算符、位运算符等等,其中五种最为常用,本文将对这五种常用运算符进行详细总结和介绍。 算术运算符 算术运算符是Java中最基本的一类运算符,用于进行加、减、乘、除等基本的数学运算。Java中的算术运算符包括加号(+)、减号(-)、乘号(*)、除号(/)和取模…

    Java 2023年5月26日
    00
  • java多线程学习笔记之自定义线程池

    Java多线程学习笔记之自定义线程池 什么是线程池 线程池是管理线程的一种机制。在Java中,可以通过Executor接口及其实现类来创建线程池。线程池的主要作用是优化线程的创建和运行过程。通过创建线程池,可以减少线程创建的开销,并且可以更好地控制线程的运行状态。 创建线程池 基本使用 Java中提供了四种线程池的实现类,它们分别为: newFixedThr…

    Java 2023年5月19日
    00
  • Java实现插入公式到PPT的示例代码

    要在Java程序中实现将公式插入到PPT中的功能,需要遵循以下步骤。 步骤1:准备工作 在开始编写代码之前,需要先安装Apache POI和JLatexMath两个库。其中,Apache POI库是一个用于创建和修改各种Office文件的Java API;而JLatexMath则是一个Java库,用于渲染LaTeX数学公式。 步骤2:创建PPT文件 要将公式…

    Java 2023年5月19日
    00
  • Java的Hello World详解

    Java的Hello World详解 简介 Hello World是学习任何编程语言的第一步,也是最基本的程序代码。在Java语言中,Hello World程序是Java学习者入门的必修课程。 安装Java环境 在开始编写Java程序之前,需要先安装Java编程环境。可以从Oracle官网下载并安装JDK(Java Development Kit)。安装过程…

    Java 2023年5月20日
    00
  • 14个编写Spring MVC控制器的实用小技巧(吐血整理)

    下面是对“14个编写Spring MVC控制器的实用小技巧(吐血整理)”的完整攻略: 1. 引入必要的依赖 在开始编写Spring MVC控制器之前,我们需要在项目中引入Spring MVC相关的依赖。通常情况下,我们需要在pom.xml文件中引入以下依赖: <dependencies> <dependency> <groupI…

    Java 2023年5月16日
    00
  • 详谈Java中net.sf.json包关于JSON与对象互转的坑

    讲解“详谈Java中net.sf.json包关于JSON与对象互转的坑”的完整攻略: 背景 JSON是一种轻量级的数据交换格式,以其简洁、易读、易解析的特点被广泛应用。而在Java中,开发者可使用net.sf.json包来轻松实现JSON与对象之间的互转。但在使用过程中,开发者需要注意一些注意事项,否则就会掉入JSON与对象互转的“坑”中。 坑点一:JSON…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部