【简写Mybatis】03-Mapper xml的注册和使用

💡 原文中文,约12000字,阅读约需29分钟。
📝

内容提要

本文介绍了Mybatis中Mapper xml的注册和使用。首先通过解析和读取XML文件,封装Mapper文件中的方法操作,并将其保存到实体中。然后介绍了XML装备构建器的作用,以及Configuration类在Mybatis中的重要作用。接着讲解了SqlSessionFactoryBuilder和SqlSessionFactory的作用,以及SqlSession和MappedStatement的使用。最后介绍了MapperRegistry、MapperProxy和MapperMethod等类的作用。

🔎

延伸解读

Configuration 的单例特性与生命周期

文章指出 Configuration 类本身并非单例,而是通过 SqlSessionFactoryBuilder 在构建阶段确保整个应用中只有一个 Configuration 实例。一旦 SqlSessionFactory 创建完成,SqlSessionFactoryBuilder 的任务即结束,通常采取即用即抛的原则。这种设计使得 Configuration 在 SqlSessionFactory 的生命周期内保持单例,从而统一管理全局配置和映射资源。

Mapper 方法调用的动态代理机制

文章通过 MapperProxy 的 invoke 方法展示了 Mapper 接口方法的执行封装。在 invoke 中,首先判断方法是否来自 Object 类,若是则直接调用;否则通过 sqlSession.selectOne 执行。后续引入 MapperMethod 类,在初始化时从 methodCache 查询,不存在则构建,并利用建造者模式构建 SqlCommand,根据接口名和方法名从 Configuration 获取 MappedStatement,最终区分 CRUD 操作执行。

XML 配置解析与 MappedStatement 构建

文章详细描述了使用 dom4j 解析 XML 配置的过程:从主配置文件读取 mappers 元素,遍历每个 mapper 资源,再解析其中的 select 等节点,提取 id、parameterType、resultType 和 SQL 语句。对于 SQL 中的 #{} 占位符,通过正则匹配替换为 ?,并将参数名存入 Map。最终构建 MappedStatement 对象并注册到 Configuration 中,为后续 SQL 执行提供映射信息。

❓

Q&A

Mybatis中Mapper xml的注册流程是怎样的?

Mapper xml的注册流程包括解析XML文件,封装Mapper文件中的方法操作,并将其保存到实体中。

Configuration类在Mybatis中有什么作用?

Configuration类在Mybatis中存储全局装备信息和管理映射资源,包括数据库连接信息和SQL映射。

SqlSessionFactoryBuilder的作用是什么?

SqlSessionFactoryBuilder用于从装备信息构建SqlSessionFactory实例,确保整个使用中只有一个Configuration实例。

如何解析Mybatis的XML配置文件?

通过使用SAXReader读取XML文件,提取SQL映射信息并打印相关内容。

MapperProxy和MapperMethod在Mybatis中有什么作用?

MapperProxy负责动态代理Mapper接口,MapperMethod封装了方法对应的SQL执行逻辑。

Mybatis中如何处理SQL语句的执行?

通过SqlSession的selectOne方法执行SQL语句,MapperMethod负责管理SQL的执行逻辑。

🏷️

标签

➡️

继续阅读