MyBatis的源码自我探索

这篇博客主要探讨MyBatis的源码,包括查看源码的快捷键、工作原理的详细步骤,以及如何将源码关联到项目中进行调试。作者从Configuration类入手,解析MyBatis的核心类组成,并提出如何映射数据类型、创建SqlSession以及调用Mapper接口完成SQL执行的问题。
摘要由CSDN通过智能技术生成

个人对MyBatis源码的理解

大家肯定对MyBatis框架使用技巧都已经滚瓜烂熟了,但大家对于MyBatis中的各种配置的

我查看源码时会用到的快捷功能键:

IDE的快捷键设置(Eclipse方案):

Ctrl + Shift + T快速打开类型

Ctrl + 鼠标左键单击

Ctrl + T 查看实现类/实现方法

Ctrl + O快速查看和定位类的属性、方法

Ctrl + H全局搜索

Alt + ←代码导航之返回

MyBatis的工作原理

1.读取MyBatis配置文件(mybatis-config.xml)这个是为MyBatis设置的全局配置文件,里面有运行环境等包括数据库的连接信息。

2.加载映射文件(mybatis-config.xml)该文件中配置了操作数据库的sql语句,这个里面可以加载多个映射文件。

3.构造绘画工厂:通过MyBatis的环境等配置信息构建会话工厂SqlSeeionFactory。

4.创建会话对象:这个是由会话工厂创建SqlSession对象,该对象中包含了执行SQL语句的所有方法。

5.Executor执行器:MyBatis底层定义了一个Executor接口来操作数据库,他将根据SqlSession传递的参数动态的生成需要执行的SQL语句,同时负责查询缓存的维护。

6.MappedStatement对象:在Executor接口的执行方法中有一个MappedStatement类型的参数,该参数是对映射信息的封装,用于存储要映射的SQL语句的id、参数等信息。

7.输入参数映射:输入参数类型可以是Map、List等集合,也可以是基本数据类型。

8.输出结果映射:输入参数类型可以是Map、List等集合,也可以是基本数据类型。

将MyBatis源码关联到项目中便于调试

在这里插入图片描述

首先进入到Configuration类看MyBatis源码中的核心类的组成​​

​​​​源码中的Configuration类
本人会围绕这个核心类开始对源码进行探索!
在此之前要先准备好一个测试方法便于观察相关动态赋值的过程
Test方法作为相关的查看对象

如何映射数据类型?

2.如何映射数据类型?
Configuration中的属性TypeHandlerRegistry的构造函数对数据库的数据类型和java的数据类型进行了一一对应。

 protected final TypeHandlerRegistry typeHandlerRegistry = new TypeHandlerRegistry();
public TypeHandlerRegistry() {
   
    register(Boolean.class, new BooleanTypeHandler());
    register(boolean.class, new BooleanTypeHandler());
    register(JdbcType.BOOLEAN, new BooleanTypeHandler());
    register(JdbcType.BIT, new BooleanTypeHandler());
 
    register(Byte.class, new ByteTypeHandler());
    register(byte.class, new ByteTypeHandler());
    register(JdbcType.TINYINT, new ByteTypeHandler());
 
    register(Short.class, new ShortTypeHandler());
    register(short.class, new ShortTypeHandler());
    register(JdbcType.SMALLINT, new ShortTypeHandler());
 
    register(Integer.class, new IntegerTypeHandler());
    register(int.class, new IntegerTypeHandler());
    register(JdbcType.INTEGER, new IntegerTypeHandler());
 
    register(Long.class, new LongTypeHandler());
    register(long.class, new LongTypeHandler());
 
    register(Float.class, new FloatTypeHandler());
    register(float.class, new FloatTypeHandler());
    register(JdbcType.FLOAT, new FloatTypeHandler());
 
    register(Double.class, new DoubleTypeHandler());
    register(double.class, new DoubleTypeHandler());
    register(JdbcType.DOUBLE, new DoubleTypeHandler());
 
    register(Reader.class, new ClobReaderTypeHandler());
    register(String.class, new StringTypeHandler());
    register(String.class, JdbcType.CHAR, new StringTypeHandler());
    register(String.class, JdbcType.CLOB, new ClobTypeHandler());
    register(String.class, JdbcType.VARCHAR, new StringTypeHandler());
    register(String.class, JdbcType.LONGVARCHAR, new StringTypeHandler());
    register(String.class, JdbcType.NVARCHAR, new NStringTypeHandler());
    register(String.class, JdbcType.NCHAR, new NStringTypeHandler())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值