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日

相关文章

  • jsp内置对象及方法详细介绍

    下面我就来详细讲解一下”JSP内置对象及方法详细介绍”。 JSP内置对象 JSP内置对象是JSP容器在JSP页面执行期间自动创建的一些对象,可以用于在JSP页面中实现不同的功能。JSP内置对象一共有9个:request、response、pageContext、session、application、out、config、exception、page 。 在…

    Java 2023年6月15日
    00
  • Docker 制作tomcat镜像并部署项目的步骤

    Docker是目前比较流行的容器化技术,可以将应用程序与其依赖的环境打包到一个容器中,提供轻量级的配置、部署和管理方式。本文将介绍制作tomcat镜像并部署项目的步骤。 准备工作 在开始制作tomcat镜像前,需要先准备好以下环境: 安装Docker 基于Docker官方的Java镜像,下载Tomcat。 编写项目代码并打包为war包。 了解 Linux 命…

    Java 2023年6月2日
    00
  • Java ORM的作用是什么?

    Java ORM(Object-Relational Mapping)是一种将对象和关系型数据库映射起来实现数据持久化的技术。ORM框架使得开发人员能够使用对象来访问和操作数据库,而不用关注底层的SQL语句和数据库操作细节,从而提高了开发效率和代码质量。 ORM的作用主要有以下几点: 简化数据库操作:ORM框架提供了ORM映射机制,可以将Java对象映射到数…

    Java 2023年5月11日
    00
  • java模仿windows计算器示例

    下面我将为您详细讲解如何使用Java语言模仿Windows计算器,并提供两个示例说明。步骤如下: 第一步:创建基本的计算器界面 在Java中,可以使用Swing框架来实现窗口界面设计。首先需要使用JFrame类创建一个窗口,然后在窗口中添加各种控件(按钮、文本框、标签等)。 在创建窗口之前,需要导入Swing框架中的各种类和方法。代码示例: import j…

    Java 2023年6月15日
    00
  • 用bat批处理实现163邮箱自动登陆的代码[已测]

    使用bat批处理实现网页自动化是一种高效的实现方式。下面是使用bat批处理实现163邮箱自动登陆的完整攻略及示例说明: 1. 准备工作 首先,需要在电脑上安装好以下两个工具: 安装好Chrome浏览器 安装好Chrome浏览器的Driver 其中,Chrome浏览器的Driver需要根据自己安装的Chrome版本来选择,可以在 https://npm.tao…

    Java 2023年6月16日
    00
  • Spring Security自定义登录页面认证过程常用配置

    下面我给您详细讲解一下“Spring Security自定义登录页面认证过程常用配置”的完整攻略,希望对您有所帮助。 一、Spring Security 自定义登录页 1.1 配置Spring Security 首先要配置 Spring Security,添加依赖: <dependency> <groupId>org.springfr…

    Java 2023年5月20日
    00
  • SpringMVC之@requestBody的作用及说明

    SpringMVC之@RequestBody的作用及说明 1. @RequestBody的作用 在Spring MVC中,@RequestBody注解用于将HTTP请求体中的JSON或XML数据绑定到Java对象上。当我们需要接收客户端发送的JSON或XML数据时,可以使用@RequestBody注解将请求体中的数据转换为Java对象。 2. @Reques…

    Java 2023年5月18日
    00
  • json转换成java对象示例

    下面是json转换成Java对象示例的完整攻略。 1. 确定json字符串格式 在转换之前,需要了解目标json字符串的格式。这里以如下的json字符串为例: { "name": "张三", "age": 20, "gender": "男", "ho…

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