
Mybatis源码学习
文章平均质量分 92
姠惢荇者
衣带渐宽终不悔 为伊消得人憔悴
展开
-
Mybatis源码学习(29)-Mybatis中的执行器CachingExecutor
一、前言 在前面的内容中已经分析了Executor的三个实现类SimpleExecutor、ReuseExecutor和BatchExecutor。这里开始分析Executor接口的装饰器类CachingExecutor。二、CachingExecutor类 CachingExecutor类直接实现了Excutor接口,是装饰器类,主要用来增强缓存相关功能。在CachingExecuto...原创 2020-02-20 15:02:36 · 1789 阅读 · 0 评论 -
Mybatis源码学习(28)-Mybatis中的执行器BatchExecutor
一、前言接着前面的《Mybatis中的执行器Executor(一)》继续分析学习Executor。在分析BatchExecutor类之前,先了解一下JDBC的批处理相关知识。二、JDBC批处理 批量处理允许将相关的SQL语句分组到批处理中,并通过对数据库的一次调用来提交它们,一次执行完成与数据库之间的交互。需要注意的是:JDBC中的批处理只支持 insert、update 、delete ...原创 2020-02-20 13:59:32 · 5694 阅读 · 0 评论 -
JDBC批量处理(转载)
JDBC批量处理 批量处理允许将相关的SQL语句分组到批处理中,并通过对数据库的一次调用来提交它们,一次执行完成与数据库之间的交互。 一次向数据库发送多个SQL语句时,可以减少通信开销,从而提高性能。不需要JDBC驱动程序来支持此功能。应该使用DatabaseMetaData.supportsBatchUpdates()方法来确定目标数据库是否支持批量更新处理。如果JDBC驱动程序支持...转载 2020-02-20 11:33:40 · 348 阅读 · 0 评论 -
Mybatis源码学习(27)-Mybatis中的执行器Executor(一)
一、简介原创 2020-02-20 11:15:24 · 957 阅读 · 0 评论 -
Mybatis源码学习(26)-resultMap元素的使用及解析过程
一、用法 关于结果映射元素<resultMap>的结构及用法,详细可以参考《Mybatis官方文档-结果映射》。下面摘了一些重要概念及其用法,如下: resultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC 不支持的操作。实际上,在为一些比如连接的复...原创 2020-02-18 16:46:33 · 1353 阅读 · 0 评论 -
Mybatis源码学习(25)-StatementHandler解析
一、简介 StatementHandler是Mybatis最核心的接口之一, 他完成了Mybatis和数据库交互的相关工作(Mybatis与JDBC之间关于Statement的交互工作)。StatementHandler主要作用:创建Statement对象为SQL 语句绑定实参执行select、insert 、update 、delete 等多种类型的SQL语句批量执行SQL语句结...原创 2020-01-18 13:59:25 · 1257 阅读 · 0 评论 -
Mybatis源码学习(24)-KeyGenerator、SelectKeyGenerator、Jdbc3KeyGenerator
一、简介 在Mybatis中,insert语句执行时,可以返回自动产生的主键,这里便是使用KeyGenerator来完成的。本篇内容就来分析Mybatis中的主键生成策略是怎么样起作用的。 首先,不同的数据库产品对应的主键生成策略不一样,主要分为两类:一类是在执行insert 语句之前必须明确指定主键的,比如: Oracle 、DB2 等数据库;一类是可以不指定主键,而在插入过程中由数据库...原创 2020-01-17 17:26:17 · 1771 阅读 · 4 评论 -
Mybatis源码学习(23)-SqlSession对象的创建过程
一、前言 在前面的内容里,我们已经分析了Mybatis中的基础支撑层的各个模块,后续也分析了在Mybatis开始工作的时候,如何加载并解析相关配置文件的内容。详细可以参考《Mybatis整体架构概述》、《Mybatis启动时的初始化过程》等内容。本节内容,我们开始来分析创建SqlSession对象的过程。二、SqlSession对象简介 SqlSession类是Mybatis接口层最核心...原创 2019-12-30 19:34:09 · 1680 阅读 · 0 评论 -
Mybatis源码学习(22)-Mapper映射文件中个元素的解析过程
一、Mapper映射文件结构 根据定义Mapper映射文件结构的mybatis-3-mapper.dtd文件,可以知道Mapper映射文件的直接子元素有:cache – 对给定命名空间的缓存配置。cache-ref – 对其他命名空间缓存配置的引用。resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。parameterMap – 已被废弃!老式风...原创 2019-12-25 18:12:18 · 1155 阅读 · 0 评论 -
Mybatis源码学习(21)-Mybatis中如何解析所有配置的Mapper映射文件
!原创 2019-12-08 22:33:56 · 785 阅读 · 0 评论 -
Mybatis源码学习(20)-Mybatis初始化时environments的解析过程
一、<environments>元素的结构在Mybatis-config.xml中,<environments>元素的配置方式如下所示:<environments default="mysql"> <environment id="mysql"> <transactionManager type="JDBC" />...原创 2019-11-28 14:17:37 · 1131 阅读 · 0 评论 -
Mybatis源码学习(19)-Mybatis拦截器实现分页插件
一、概述 本文主要是通过Mybatis拦截器,实现一个简易的分页插件。本实例旨在学习Mybatis拦截器的用法,所以在实现分页插件的过程中,更重视的是对拦截器使用方法的分析,而非实现的分页插件本身。二、环境Windows开发环境MySQL数据库...原创 2019-11-11 18:27:45 · 959 阅读 · 0 评论 -
Mybatis源码学习(18)-Mybatis的Plugin模块基础学习
到的对象原创 2019-11-06 23:06:59 · 498 阅读 · 0 评论 -
Mybatis源码学习(17)-Mybatis启动时的初始化过程
一、概述 在Mybatis项目中,在启动的过程中,需要加载一系列的配置文件,首先需要加载Mybatis-config.xml文件,然后在根据Mybatis-config.xml文件中的配置,加载相关联的其他文件,常见需要加载的文件有Mapper配置文件、jdbc配置文件等。其中,Mapper配置文件可以通过注解等代替对应XML配置文件。二、初始化过程1、初始化入口 Mybatis框架初...原创 2019-10-23 15:05:31 · 660 阅读 · 0 评论 -
Mybatis源码学习(16)-binding模块之MapperProxy、MapperRegistry类
一、前言 在上一篇《Mybatis源码学习(15)-binding模块之MapperMethod类》中,已经概述了Mybatis中binding模块的相关概念,同时详细分析了MapperMethod类。这一篇我们来分析binding模块中剩余的类,分别是MapperProxyFactory、MapperProxy、MapperRegistry等。二、MapperProxy类 Mapper...原创 2019-10-21 12:07:35 · 621 阅读 · 0 评论 -
Mybatis源码学习(15)-binding模块之MapperMethod类
一、概述1、Mybatis操作数据 在Mybatis中,进行数据操作时,有两种方式,分别是:1、使用传统的MyBatis提供的API;2、使用Mapper接口,即面向接口编程。传统的Mybatis工作模式示例: @Test public void testApi() { SqlSession sqlSession = mySqlSessionFactory.openSe...原创 2019-10-18 18:38:18 · 635 阅读 · 0 评论 -
Mybatis源码学习(14)-数据库事务Transaction
一、 事务概念概念:数据库事务是构成单一逻辑工作单元的操作集合。一个典型的数据库事务如下所示:BEGIN TRANSACTION //事务开始SQL1SQL2COMMIT/ROLLBACK //事务提交或回滚解释:数据库事务可以包含一个或多个数据库操作,但这些操作构成一个逻辑上的整体。构成逻辑整体的这些数据库操作,要么全部执行成功,要么全部不执行。构成事务的所有操作,...原创 2019-10-15 22:30:39 · 620 阅读 · 0 评论 -
Mybatis源码学习(13)-数据源模块
一、概述 数据源是系统中数据持久层最重要的概念之一,甚至没有之一。数据源组件提供了系统访问数据库的能力。在Java中定义了数据源接口javax.sql.DataSource,常见的数据源组件一般都会实现该接口。二、工厂模式简介 因为在Mybatis的数据源模块的代码中,采用了工厂设计模式,工厂模式有几种变化形式,这里不做过多分析,只是简单回顾一下工厂模式的概念。UML图如下: 通过...原创 2019-10-12 23:47:38 · 684 阅读 · 2 评论 -
Mybatis源码学习(2)-整体架构概述
Mybatis架构1、整体架构 注:该内容来源于《Mybatis技术内幕》一书。 MyBatis的整体架构分为三层, 分别是基础支持层、核心处理层和接口层。1>、基础支撑层 基础支撑层主要包括了数据源模块、事务管理模块、缓存模块、Bingding模块、反射模块、类型转换、日志模块、资源加载、解析器模块等。反射模块 Mybatis中专门提供了反射模块,该模块对Java...原创 2019-08-29 15:26:48 · 770 阅读 · 0 评论 -
Mybatis源码学习(3)-解析器模块之PropertyParser、GenericTokenParser
一、模块简介 解析器模块的主要提供了两个功能:为解析mybatis配置文件、mapper映射文件等提供支持。为处理动态SQL语句中的占位符提供支持。二、包结构 解析器模块的包结构如上图所示,其中,XPathParser 和XNode 主要用来解析 XML,PropertyParser、GenericTokenParser 、TokenHandler 主要用于标记处理(占位符),...原创 2019-08-31 23:22:10 · 1336 阅读 · 0 评论 -
Mybatis源码学习(4)-解析器模块之<properties>标签应用
<properties>标签应用 该部分主要分析<properties>标签的应用过程,其中主要讲解PropertyParser在这个过程中扮演的角色和作用。1、场景设定 该场景主要是使用<properties>标签定义数据库连接参数,然后在数据源配置中使用<properties>标签中定义的参数,其中并开启了占位符的默认配置。 第一部分...原创 2019-09-01 10:28:19 · 544 阅读 · 0 评论 -
Mybatis源码学习(5)-解析器模块之XNode、XPathParser
一、XPathParser类二、XNode类原创 2019-09-01 23:42:21 · 2826 阅读 · 0 评论 -
Mybatis源码学习(6)-日志模块之Log、LogFactory及适配器类
一、模块简介 MyBatis的日志模块位于org.apache.ibatis.logging包中,通过适配器模式,实现了集成和复用常见的第三方日志组件。Mybatis支持的多个第三方日志插件,优先级由低到高为slf4J、commonsLoging、Log4J2、Log4J和JdkLog等。二、适配器模式1、概念 这里简单对适配器模式进行一个解释。适配器模式的主要目的是解决由于接口不能兼...原创 2019-09-05 23:34:08 · 1160 阅读 · 2 评论 -
Mybatis源码学习(7)-日志模块二——关于JDBC动态代理实现日志功能
1、概述 日志模块除了实现常规第三方日志的集成外,还实现了通过JDK动态代理实现了对JDBC操作进行了日志增强功能。2、动态代理 Subject是程序中的业务逻辑接口, RealSubject 是实现了Subject接口的真正业务类,Proxy是实现了Subject接口的代理类,其中封装了RealSubject 对象。在程序中不会直接调动RealSubject对象的方法,而是使用Prox...原创 2019-09-07 10:59:16 · 432 阅读 · 0 评论 -
Mybatis源码学习(8)-资源加载
1、概述 Mybatis的IO模块主要封装了ClassLoader以及读取资源文件的相关API。2、类加载器注:类加载器相关内容来源《Mybatis技术内幕》一书。 Java虚拟机中的类加载器( ClassLoader )负责加载来自文件系统、网络或其他来源的类文件。Java 虚拟机中的类加载器默认使用的是双亲委派模式。有三种默认使用的类加载器,分别是Bootstrap Class...原创 2019-09-09 15:51:37 · 553 阅读 · 0 评论 -
Mybatis源码学习(9)-反射模块之Reflector、ReflectorFactory
1、概述 Mybatis的org.apache.ibatis.reflection包下,是Mybatis反射模块的代码集合,包结构如下所示。其中,Reflector是Mybatis中反射模块的基础,每个Reflector对象都对应一个类,在Reflector中缓存了反射操作需要使用的类的元信息。ReflectorFactory接口主要是为了实现对Reflector对象的创建和缓存,Mybati...原创 2019-09-09 23:43:25 · 1222 阅读 · 0 评论 -
Mybatis源码学习(10)-类型处理器之TypeHandler、BaseTypeHandler、UnknownTypeHandler等
一、概述 JDBC数据类型与Java 语言中的数据类型井不是完全对应的,所以在执行SQL查询的时候,需要把参数从Java类型转成JDBC类型,在处理结果集的时候,需要把结果集中的JDBC数据类型转换成对应的Java类型。二、类详解 Mybatis类型处理相关代码主要在org.apache.ibatis.type包中。主要包括了以下类型,其中*TypeHandler代表了不同类型的类型处理...原创 2019-09-16 14:47:11 · 1981 阅读 · 2 评论 -
Mybatis源码学习(11)-类型处理器之TypeHandlerRegistry、TypeAliasRegistry、Alias、MappedJdbcTypes、MappedTypes
一、概述 Mybatis类型转换模块,除了定义了一些列的类型处理器(类型转换器)外,还提供了一些其他类,比如:类型处理器注册器类、别名注解类等。主要包含了以下类:Alias 注解类别名注解JdbcType 枚举类JdbcType枚举类,对应数据库表中字段的类型MappedJdbcTypes 注解类用于指明类型处理器可以处理的JdbcType中的类型集合MappedTypes 注...原创 2019-09-17 13:20:05 · 7458 阅读 · 1 评论 -
Mybatis源码学习(12)-缓存模块
一、概述 MyBatis中的缓存是两层结构的,分为一级缓存、二级缓存,但在本质上是相同的,它们使用的都是Cache接口的实现。二、装饰器模式简介 Mybatis缓存模块使用了装饰模式。这里简单介绍一下装饰模式,该模式主要实现动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。(引自《大话设计模式》)装饰器模式的结构图如下:其中,Component:对象接...原创 2019-09-19 18:43:39 · 294 阅读 · 1 评论 -
Mybatis源码学习(1)-源码环境搭建
一、下载源码 源码官方下载地址:https://github.com/mybatis/mybatis-3。当前使用的版本是:mybatis-3.4.6。二、导入Mybatis到eclipse中。 普通的maven项目导入方式,不做详细描述。三、修改pom文件,增加mysql-connector-java依赖 在pom文件的dependencies元素中增加mysql依赖jar。如下...原创 2019-08-29 15:27:10 · 492 阅读 · 0 评论