![](https://img-blog.csdnimg.cn/822f0247ce054ec28d291e63d0b1c9b5.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Mybatis源码分析
文章平均质量分 97
源码阅读是理解和分析优秀的开源代码,并从中积累和学习的过程。就如同剖析一座摩天大楼的内部构造般去分析一个优秀开源项目的组织划分、结构设计和功能实现,进而学习、借鉴并最终应用到自己的项目中,提升自己的软件设计和开发能力。
长安不及十里
活到老,学到老,作为程序猿的基本修养,哈哈哈哈哈!
展开
-
Mybatis源码分析(十五)Spring-Mybatis整理
spring的IOC容器在启动,创建好bean对象实例后,会检查这个bean对象是否实现了FactoryBean接口,如果是,则调用该bean对象的getObject方法,在getObject方法中实现创建并返回实际需要的bean对象实例,然后将该实际需要的bean对象实例注册到spring容器;由BeanFactory中使用的对象实现的接口,这些对象本身就是单个对象的工厂,如果一个bean实现了这个接口,那么它将被用作要公开的对象的工厂,而不是直接用作将自己公开的bean实例。原创 2023-03-18 22:33:28 · 662 阅读 · 1 评论 -
Mybatis源码分析补充(一)JDBC详解
JDBC(Java Database Connectivity)是Java语言中提供的访问关系型数据的接口。JDBC API基于X/Open SQL CLI,是ODBC的基础。JDBC提供了一种自然的、易于使用的Java语言与数据库交互的接口,自1997年1月Java语言引入JDBC规范后,JDBC API被广泛接受,并且广大数据库厂商开始提供JDBC驱动的实现。JDBC API为Java程序提供了访问一个或多个数据源的方法,在大多数情况下,数据源是关系型数据库,它的数据是通过SQL语句来访问的。原创 2023-03-18 10:17:30 · 1626 阅读 · 2 评论 -
Mybatis源码分析(十四)Mybatis的设计模式梳理
前面介绍了Mybatis的基本知识,我们通过源码可以发现,优秀的框架少不了设计模式的运用,下面我们来梳理一下Mybatis的设计模式。原创 2023-03-11 11:52:40 · 1346 阅读 · 2 评论 -
Mybatis源码分析(十三)Mybatis的四大组件
前面我们基本的流程都已经介绍完毕,下面我们来梳理一下前面的知识,加深自己的理解,以及重复记忆下面我们以代码和原理的方式来解读这些组件,首先我们来介绍Mybatis中重要组件执行器Executor。原创 2023-03-04 10:59:56 · 1456 阅读 · 2 评论 -
Mybatis源码分析(十二)Mybatis的插件开发及原理分析
Executor实例会在创建 SqlSession 的过程中被创建,Executor实例创建完毕后,MyBatis会通过JDK动态代理为实例生成代理类。MyBatis 的插件可以在不修改原来的代码的情况下,通过拦截的方式,改变四大核心对象的行为,比如处理参数,处理SQL,处理结果。根据前面的知识,我们可以了解到插件可以对执行器,参数处理器,处理Sql,处理结果,我们首先来看看执行器的拦截。经过动态代理我们就可以调用到我们自己写的插件类,的具体的方法,这里以执行器作为案例讲解,其他也是一样的。原创 2023-02-25 13:25:40 · 1088 阅读 · 0 评论 -
Mybatis源码分析(十一)Mybatis的一级缓存与二级缓存
MyBatis的二级缓存相对于一级缓存来说,实现了SqlSession之间缓存数据的共享,同时粒度更加的细,能够到namespace级别,通过Cache接口实现类不同的组合,对Cache的可控性也更强。MyBatis在多表查询时,极大可能会出现脏数据,有设计上的缺陷,安全使用二级缓存的条件比较苛刻。原创 2023-02-24 16:43:09 · 817 阅读 · 0 评论 -
Mybatis源码分析(十)Mybatis的结果隐射
上一篇文章介绍了Mybatis 是如何与数据库打交道了,我们可以拿到数据库给的结果,但是不一定是我们想要的结果,需要通过Mybatis的的结果隐射才能拿到我们想要的结果,下面我们来介绍数据库的结果隐射?首先我们来看看我们写的测试类?原创 2023-02-21 11:23:11 · 959 阅读 · 2 评论 -
Mybatis源码分析(九)Mybatis的PreparedStatement
上一篇文章我们分析了,Select的语句的执行过程,但是在与数据库打交道的那一块,我们没有详细介绍,下面我们来看看Mybatis中是如何与数据库打交道的?原创 2023-02-15 11:39:41 · 1303 阅读 · 0 评论 -
Mybatis源码分析(八)MapperMethod的Select分析
上一篇文章我们分析到了MapperMethod的Insert执行流程,Update,Delete 语句执行过程其实都差不多,我们来看看Select语句?原创 2023-01-15 20:30:37 · 1017 阅读 · 0 评论 -
Mybatis源码分析(七)MapperMethod的INSERT分析
上一篇文章我们介绍了Mapper的接口代理,这篇文章我们来介绍一下具体的执行过程?动态代理过程的执行方法invoke()MapperProxyMapperMethodInvoker的接口实现:DefaultMethodInvoker与PlainMethodInvokerPlainMethodInvoker接着调用具体的执行方法,execute方法,我们具体里看看他的执行过程MapperMethod下面我们具体来分析一下执行流程?这里我们以insert语句开头,更新,删除都差不多,查询下一篇文章原创 2023-01-15 16:28:41 · 1218 阅读 · 0 评论 -
Mybatis源码分析(六)Mapper的接口代理
在Mapper文件的对sql语句的解析过程中,我们发现MapperRegistry.addMapper其实就是获取当前映射文件的命名空间,并获取其Class,也就是获取每个Mapper接口,然后为每个Mapper接口创建一个代理类工厂,new MapperProxyFactory(type),并放进 knownMappers 这个HashMap中,我们来看看这个MapperProxyFactory。下面我们来看看为啥我们可以直接调用接口的方法?原创 2023-01-15 13:17:49 · 1101 阅读 · 0 评论 -
Mybatis源码分析(五)SqlSession的创建
使用 MyBatis 的主要 Java 接口就是 SqlSession。你可以通过这个接口来执行命令,获取映射器实例和管理事务。在介绍 SqlSession 接口之前,我们先来了解如何获取一个 SqlSession 实例。SqlSessions 是由 SqlSessionFactory 实例创建的。SqlSessionFactory 对象包含创建 SqlSession 实例的各种方法。原创 2023-01-12 17:01:06 · 1540 阅读 · 0 评论 -
Mybatis源码分析(四)Mapper文件的解析
1. 调用XMLMapperBuilder#parse()对我们编写的Mybats.xml文件解析,主要包括:cache,resultMap,sql,select|insert|update|delete语句进行解析2. resultMap进行解析是主要调用XMLMapperBuilder这个类进行解析返回ResultMapping3. select|insert|update|delete解析主要调用XMLStatementBuilder这个类对数据库各个节点进行解析返回Mappe原创 2023-01-12 15:36:14 · 1971 阅读 · 0 评论 -
Mybatis源码分析(三)SqlSessionFactoryl的初始化
文章主要介绍sqlSessionFactory是如何被创建的,主要是对我们配置的各个节点的解析并设置到Configuration的属性之中,我们可以看到Mybatis的设计模式的运用一以及个功能模块的流程上应该符合单一职责,而每一个具体的实现又得具备迪米特法则,这样实现出来的功能才能具有良好的扩展性。原创 2023-01-11 16:01:21 · 3424 阅读 · 0 评论 -
Mybatis源码分析(二)Mybatis-config.xml的初始化
本篇文件介绍mybatis-config.xml的文件解析,主要通过阅读源码和断点调试的方式来理解解析过程,这个过程会学到类的加载机制,双亲委派机制,VFS等等知识主要通过类的加载机制将我们编写的配置文件转换成流数据,以便SqlSessionFactoryBuilder构建SqlSession对象原创 2023-01-11 10:54:22 · 3575 阅读 · 0 评论 -
Mybatis源码分析(一)Mybatis 基本使用
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。简单来学,就是一个保存数据的工具,就像我们存钱一样,总要有个介质来帮助我们来存钱,不用过多理解。原创 2022-12-14 15:54:36 · 3188 阅读 · 0 评论