深入剖析:自己实现 MyBatis 底层机制的步骤与原理解析

 😀前言

        在本文中,我们将探讨如何自己实现 MyBatis 底层机制,这将帮助我们更深入地理解 MyBatis 框架的内部工作原理。我们将从项目环境的搭建开始,逐步构建一个简化版的 MyBatis,包括封装 SqlSession 到执行器、创建 Mapper 接口和 Mapper.xml、MapperBean 的设计,以及使用动态代理代理 Mapper 的方法。同时,我们还将回顾 MyBatis 的整体架构,明确了解其关键组件和原理。

        首先,我们创建了一个 Maven 项目,并配置了必要的依赖。随后,我们准备了数据库表,以便在底层机制的实现中进行数据操作。接着,我们编写了 MyBatis 的核心配置文件 mybatis-config.xml,其中进行了全局配置,包括数据源、事务管理器、类型别名等。

接下来,我们着手实现了 SqlSessionFactory 的创建,该工厂类是 MyBatis 的核心,用于创建 SqlSession。通过 SqlSession,我们可以进行数据库操作,这需要理解 SqlSession 底层是如何与数据库连接进行交互的,包括 ExecutorMappedStatement 的设计和实现。 Executor 负责执行 SQL 语句,而 MappedStatement 是通过解析 Mapper.xml 文件生成的,包含了 SQL 语句定义以及参数和结果的映射信息。

        最后,我们介绍了 Mapper 接口和 Mapper.xml 的创建,以及如何使用动态代理来代理 Mapper 的方法,从而使其与 SQL 语句关联起来。这一系列步骤将帮助我们实现一个简单的 MyBatis 底层机制,从而更好地理解 MyBatis 框架的工作原理。

🏠个人主页:[尘觉主页](https://blog.csdn.net/apple_67445472?type=blog)

🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉

在csdn获奖荣誉: 🏆csdn城市之星2名
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 💓Java全栈群星计划top前5
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 🤗 端午大礼包获得者

⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 🥰阿里云专家博主 ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 

⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 😉亚马逊DyamoDB结营

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦😊

技术特点

封装Sqlsession到执行器+ Mapper 接口和Mapper.xml + MapperBean + 动态代理  代理Mapper 的方法

文章目录

🥰深入剖析:自己实现 MyBatis 底层机制的步骤与原理解析

MyBatis 整体架构分析

对上图的解读

😊搭建 MyBatis 底层机制开发环境

配置xml文件

创建数据库和表

设计思路 

 😄总结


🥰深入剖析:自己实现 MyBatis 底层机制的步骤与原理解析

MyBatis 整体架构分析

对上图的解读

1) mybatis 的核心配置文件mybatis-config.xml: 进行全局配置,全局只能有一个这样的配置文件XxxMapper.xml 配置多个 SQL,可以有多个 XxxMappe.xml 配置文件

2) 通过 mybatis-config.xml 配置文件得到  SqlSessionFactory

3) 通过 SqlSessionFactory 得到 SqlSession,用 SqlSession 就可以操作数据了

4) SqlSession 底层是 Executor(执行器), 有 2 个重要的实现类, 有很多很多方法

 

5) MappedStatement 是通过 XxxMapper.xml 中定义, 生成的 statement 对象

6) 参数输入执行并输出结果集, 无需手动判断参数类型和参数下标位置, 且自动将结果集 映射为 Java 对象

😊搭建 MyBatis 底层机制开发环境

创建maven项目

流程就不多说了上一篇和手写Spring 和Spring MVC已经介绍过了

配置xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.wyxdu</groupId>
    <artifactId>wyx-mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--定义编译器 / source / target 版本即可-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <java.version>1.8</java.version>
    </properties>
    <!--引入必要的依赖-->
    <dependencies>
        <!--引入dom4j-->
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        <!--引入mysql依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>
        <!--lombok-简化entity/javabean/pojo开发 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.4</version>
        </dependency>
</project>

创建数据库和表

CREATE DATABASE `wyx_mybatis`;
USE `wyx_mybatis`;

CREATE TABLE `monster` (
`id` INT NOT NULL AUTO_INCREMENT, 
`age` INT NOT NULL, 
`birthday` DATE DEFAULT NULL, 
`email` VARCHAR(255) NOT NULL, 
`gender` TINYINT NOT NULL, 
`name` VARCHAR(255) NOT NULL, 
`salary` DOUBLE NOT NULL,
PRIMARY KEY (`id`)
) CHARSET=utf8

INSERT INTO `monst` VALUES(NULL, 100, '2022-9-8', 'wyx@qq.com', 2,'WYX', 1234.55)

设计思路 

 😄总结

通过本文的探讨,我们深入研究了如何自己实现 MyBatis 底层机制。我们开始于项目环境的搭建,随后逐一实现了 MyBatis 核心组件,包括 SqlSessionFactory 的创建、SqlSession 的封装、ExecutorMappedStatement 的设计,以及 Mapper 接口和 Mapper.xml 的创建与动态代理的使用。

这一过程不仅让我们更深入地理解了 MyBatis 框架的内部工作原理,还培养了我们在底层数据库操作和框架设计方面的技能。自己实现 MyBatis 底层机制是一个复杂的任务,但它有助于我们更好地掌握这个流行的数据访问框架,同时也为我们提供了深入学习数据库和持久层技术的机会。希望本文能够对你的学习和项目开发有所帮助。

😍深入解析:自己实现 MyBatis 底层机制系列

第一篇-->深入剖析:自己实现 MyBatis 底层机制的步骤与原理解析

第二篇-->深入解析:自己实现 MyBatis 底层机制的任务阶段1 - 读取配置文件与建立数据库连接

第三篇-->深入实现 MyBatis 底层机制的任务阶段2 - 编写执行器与数据库操作

第四篇-> 深入实现 MyBatis 底层机制的任务阶段3 - 封装 SqlSession 到执行器

第五篇-->深入实现 MyBatis 底层机制的任务阶段4 - 开发 Mapper 接口和 Mapper.xml

第六篇-->深入实现 MyBatis 底层机制的任务阶段 5- 开发和 Mapper 接口相映射的 MapperBean

第七篇-->深入实现 MyBatis 底层机制的任务阶段 6-实现任务阶段 6- 在 WyxConfiguration, 读取 XxxMapper.xml,能够创建 MappperBean 对象

第八篇->深入实现 MyBatis 底层机制的实现任务阶段 7- 实现动态代理 Mapper 的方法

😁热门专栏推荐

 想学习vue的可以看看这个 

java基础合集 

数据库合集 

redis合集 

nginx合集 

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁 希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻 如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尘觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值