2024年3月6日
MyBatis 是一个优秀的基于 Java 的持久层框架,它使用 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。 在 MyBatis 中,SqlNode 和 SqlSource 是核心处理层的两个重要组件。 SqlNode:SqlNode 是 MyBatis 中用来表示一个 SQL 语句片段的接口。它可以是静态的 SQL 语句……
阅读全文
2024年3月6日
和 Spring 框架 的 IoC 容器初始化 一样,Mybatis 也会通过定位、解析相应的配置文件完成自己的初始化。Mybatis 的配置文件主要有 mybatis-config.xml 核心配置文件 及一系列映射配置文件,另外,Mybatis 也会根据注解进行配置。 1 BaseBuilder Mybatis 初始化 的主要内容是加载并解析 mybatis-config.xml 配置文件、映射配置文件以及相关的注解信息。M……
阅读全文
2024年3月6日
mybatis 日志源码 Author: HuiFer Description: 该文介绍 mybatis 日志相关源码 源码阅读工程: SourceHot-Mybatis 核心类 org.apache.ibatis.logging.Log org.apache.ibatis.logging.LogFactory 多个日志实现 org.apache.ibatis.logging.log4j2.Log4j2Impl org.apache.ibatis.logging.slf4j.Slf4jLocationAwareLoggerImpl … 源码流程 mybatis 提供了一个日志接口,内容如下. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 /** * mybatis 的日志接口,提供日志级别 * <ol> * <li>error</li> * <li>debug</li> * <li>trace</li> * <li>warn</li> * </ol> * <p>通过自己定义的接口来实现各大日……
阅读全文
2024年3月6日
mybatis 反射 Author: HuiFer Description: 该文介绍 mybatis 反射相关类的源码 源码阅读工程: SourceHot-Mybatis addDefaultConstructor mybatis 的反射相关内容在org.apache.ibatis.reflection 下存放. 本片主要讲解org.apache.ibatis.reflection.Reflector类, 先看一下该类的属性 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16……
阅读全文
2024年3月6日
mybatis 缓存 Author: HuiFer Description: 该文介绍 mybatis Cache 源码 源码阅读工程: SourceHot-Mybatis org.apache.ibatis.cache.Cache 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 public interface Cache { String getId(); /** * 放入数据 */ void putObject(Object key, Object value); /** * 获取数据 */ Object getObject(Object key); /** * 移除数据 */ Object removeObject(Object key); /** * 清空数据 */ void clear(); /** * 有多少缓存数据 */ int getSize(); /** * 重入锁 * @return A ReadWriteLock */ default ReadWriteLock getReadWriteLock() { return null; } } BlockingCache: 阻……
阅读全文
2024年3月6日
MyBatis 中的缓存分为一级缓存、二级缓存,但在本质上是相同的,它们使用的都是 Cache 接口 的实现。MyBatis 缓存模块 的设计,使用了装饰器模式,这里不对此进行过多解析,以后会专门开一篇博文分析常用框架中使用到的设计模式。 1 Cache 组件 MyBatis 中缓存模块相关的代码位于 org.apache.ibatis.cache 包 下,其中 Cache 接口 是缓存模块中最核心的接……
阅读全文
2024年3月6日
binding 模块主要为了解决一个历史遗留问题,原先查询一个 VO 对象 时需要调用 SqlSession.queryForObject(“selectXXVOById”, primaryKey)方法,执行指定的 sql 语句,第一个参数 selectXXVOById 指定了执行的 sql 语句 id,如果我们不小心写错了参数,Mybatis 是无法在……
阅读全文
2024年3月6日
在数据持久层,数据源和事务是两个非常重要的组件,对数据持久层的影响很大,在实际开发中,一般会使用 Mybatis 集成第三方数据源组件,如:c3p0、Druid,另外,Mybatis 也提供了自己的数据库连接池实现,本文会通过 Mybatis 的源码实现来了解数据库连接池的设计。而事务方面,一般使用 Spring 进行事务的管……
阅读全文
2024年3月6日
在 Mybatis 的基础支持层主要看一下支撑 ORM 实现 的底层代码。 1 反射工具包 1.1Reflector Reflector 类 主要实现了对 JavaBean 的元数据属性的封装,比如:可读属性列表,可写属性列表;及反射操作的封装,如:属性对应的 setter 方法,getter 方法 的反射调用。源码实现如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32……
阅读全文
2024年3月6日
作为一名初入职场的开发者,最开始是在逛 B 站刷视频时看到的一个 Spring 源码阅读解析,当时作为一个只知道 SSH 和 CRUD 的 boy,看完后心里就两个词儿“卧槽!牛 B 啊!”而且在去年秋招面试阿里时几乎每次都会被面试官问道“有阅读过什么开源框架吗?”每次我都只能一脸便秘的“嗯…,呃…,啊…,木得…”。这在……
阅读全文