Mybatis工作流程及原理详解

一、概述
1.何为mybatis?
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

二、MyBatis的重要组件
Mybatis底层封装了JDBC,使用了动态代理模式。
1.SqlSessionFactoryBuilder (构造器):使用Builder模式根据mybatis-config.xml配置或者代码来生成SqISessionFactory。

2.SqlSessionFactory (工厂接口):使用工厂模式生成SqlSession。

3.SqlSession (会话): 一个既可以发送 SQL 执行返回结果,也可以获取Mapper的接口。

4.SQL Mapper (映射器): 它由一个Java接口和XML文件(或注解)构成,需要给出对应的SQL和映射规则,它负责发送SQL去执行,并返回结果。

5.Executor:Executor(执行器)接口有两个实现类,其中BaseExecutor有三个继承类分别是BatchExecutor(重用语句并执行批量更新),ReuseExecutor(重用预处理语句prepared statement,跟Simple的唯一区别就是内部缓存statement),SimpleExecutor(默认,每次都会创建新的statement)。以上三个就是主要的Executor。通过下图可以看到Mybatis在Executor的设计上面使用了装饰器模式,我们可以用CachingExecutor来装饰前面的三个执行器目的就是用来实现缓存

三、Mybatis工作流程

1.通过SqlSessionFactoryBuilder创建SqlSessionFactory对象。

2.通过SqlSessionFactory创建SqlSession对象。

3.通过SqlSession拿到Mapper代理对象。

4.通过MapperProxy调用Mapper中增删改查的方法。

四、Mybatis源码分析
1.通过SqlSessionFactoryBuilder创建SqlSessionFactory。
首先在SqlSessionFactoryBuilder的build()方法中可以看到MyBatis内部定义了一个类XMLConfigBuilder用来解析配置文件mybatis-config.xml。针对配置文件中的每一个节点进行解析并将数据存放到Configuration这个对象中,紧接着使用带有Configuration的构造方法发返回一个DefautSqlSessionFactory。

在这里插入图片描述
在这里插入图片描述
第二步则是通过SqlSessionFactory创建SqlSession。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第三步通过SqlSession拿到Mapper对象的代理。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第四步通过MapperProxy调用Maper中相应的方法。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结:
本文结合Mybatis源码,详细的阐述了业务编码中通过Mapper接口方式来操作数据库的底层实现原理。
实现关键在于每次通过调用接口方法操作数据库的时候,Mybatis都会利用MapperProxyFactory创建当前Mapper接口对应的MapperProxy代理实现类,在此代理类定义的增强中,会利用sqlSession、接口、方法等信息构造MapperMethod。MapperMethod是Mybatis对Mapper的接口方法生成的对应封装类,此封装类定义了真正的操作数据库的代码实现,最终对数据库的操作就是依赖他实现的。文章来源地址https://uudwc.com/A/db5E9

原文地址:https://blog.csdn.net/qq_42077317/article/details/133029650

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年09月23日 18:35
c++ 多态的
下一篇 2023年09月23日 18:35