【Java进阶营】MyBatis的架构原理

【MyBatis系列9】只要五分钟,彻底搞懂MyBatis插件原理及PageHelper原理 MyBatis插件实现原理前言MyBatis中插件是如何实现的MyBatis插件的使用MyBatis插件实现原理插件的加载插件如何进行拦截拦截Executor对象其他对象插件解析插件执行流程假如一个对象被代理很多次PageHelper插件的使用PageHelper插件原理为什么PageHelper只对startPage后的第一条select语句有效不通过插件能否改变MyBatis的核心行为总结 前言 提到插件,相信大家都知道,插件的存在主要是用来改变或者增强原有的功能,MyBatis中也一样。然而如果我们对 阅读详情

一、MyBatis架构图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sbd4BU1P-1650624595984)(//upload-images.jianshu.io/upload_images/1377793-7869c1e9d648cbe5.png?imageMogr2/auto-orient/strip|imageView2/2/w/983/format/webp)]

接口层

是MyBatis提供给开发人员的一套API,只要使用SqlSession接口,通过SqlSession接口和Mapper接口,开发人员可以通知MyBatis框架调用哪一条SQL命令以及SQL命令关联参数。

数据处理层

是MyBatis框架内部的核心实现,来完成对映射文件的解析与数据处理。

  • 参数解析与参数绑定
  • SQL解析
  • 结果集映射解析与结果集映射处理

支撑层

用来完成MyBatis与数据库基本连接方式以及SQL命令与配置文件对应,主要负责:

  • MyBatis与数据库连接方式管理
  • MyBatis对事务管理方式
  • 配置文件加载
  • MyBatis查询缓存管理

二、架构流程图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1rmBKzJf-1650624595992)(//upload-images.jianshu.io/upload_images/1377793-c87f28c8dd2b88b5.png?imageMogr2/auto-orient/strip|imageView2/2/w/795/format/webp)]

  1. MyBatis配置文件

    • config.xml:配置了全局配置文件,配置了MyBatis的运行环境等信息。

    • mapper,xml:sql的映射文件,配置了操作数据库的sql语句,此文件需在config.xml中加载。

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4zzQLPfE-1650624595994)(//upload-images.jianshu.io/upload_images/1377793-516e16e92a0c6105.png?imageMogr2/auto-orient/strip|imageView2/2/w/1048/format/webp)]

  2. SqlSessionFactory:通过MyBatis环境等配置信息构造SqlSessionFactory(会话工厂)。

  3. SqlSession:通过会话工厂创建SqlSession(会话),对数据库进行增删改查操作。

  4. Exector执行器:MyBatis底层自定义了Exector执行器接口来具体操作数据库,Exector接口有两个实现,一个基本执行器(默认),一个是缓存执行器,SqlSession底层是通过Exector接口操作数据库。

  5. MappedStatement:MyBatis的一个底层封装对象,它包装了MyBatis配置信息与sql映射信息等。mapper.xml中的insert/select/update/delete标签对应一个MappedStatement对象。标签的id就是MappedStatement的id。

    • MappedStatement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo、Executor通过MappedStatement在执行sql前将输入的Java对象映射至sql中,输入参数映射就是JDBC编程对preparedStatement设置参数。
    • MappedStatement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过MappedStatement在执行sql后将输出结果映射至Java对象中,输出结果映射就是JDBC编程对结果的解析处理过程。在此我向大家推荐一个架构学习交流圈。交流学习伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

调用流程图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OYbpMdjE-1650624595995)(//upload-images.jianshu.io/upload_images/1377793-6bf39845d695874e.png?imageMogr2/auto-orient/strip|imageView2/2/w/1033/format/webp)]

Mapper代理执行原理

Mapper代理开发方式使用的是JDK的动态代理(针对有接口的类进行动态代理)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EKFLXhrp-1650624595998)(//upload-images.jianshu.io/upload_images/1377793-b3bdac40c88d60e0.png?imageMogr2/auto-orient/strip|imageView2/2/w/884/format/webp)]

深入详解Mybatis的架构原理与6大核心流程 MyBatis 是 Java 生态中非常著名的一款 ORM 框架,目前在一线互联网大厂中应用广泛,Mybatis已经成为了一个必会框架。 如果你想要进入一线大厂,能够熟练使用 MyBatis 开发已经是一项非常基本的技能,同时大厂也更希望自己的开发人员深入了解 MyBatis 框架的原理和核心实现。 从这个角度看,理解 MyBatis 原理,阅读 MyBatis核心源码,这样更有利于提高职场竞争力。 在深入了解Mybatis的源码之前,我们先了解一下Mybatis的整体架构和工作原理,这样有助于我们在阅读. 阅读详情

相关推荐

【Java进阶营】Mybatis二级缓存的介绍及使用,使用redis实现二级缓存

一、二级缓存 二级缓存是全局作用域缓存,默认是不开启的,需要手动进行配置。 Mybatis提供二级缓存的接口以及实现,缓存实现的时候要求实体类实现Serializable接口,二级缓存在sqlSession关闭或提交之后才会生效。 1-1、特性: 默认已经开启,但是未实现 作用域:基于全局范围应用级别 缓存默认同样使用一级缓存的PerpetualCache类,不同的是在这个基础之上又套了一层Map(org.apache.ibatis.session.Configuration#caches ),其key为

2234

【Mybatis】Mybatis架构简介

它会根据运行时用户传入的实参,解析动态 SQL 中的标签,并形成 SQL 模板,然后处理 SQL 模板中的占位符,用运行时的实参填充占位符,得到数据库真正可执行的 SQL 语句。持久层框架核心组件之一就是数据源,MyBatis 自身提供了一套不错的数据源实现,也是 MyBatis 的默认实现。MyBatis 的反射工具箱是在 Java 反射的基础之上进行的一层封装,为上层使用方提供更加灵活、方便的 API 接口,同时缓存 Java 的原生反射相关的元数据,提升了反射代码执行的效率,优化了反射操作的性能。

DreamSun的博客 3416

【Java进阶营】MyBatis的多对多关联关系,你知道吗?

在实际项目开发中,多对多关系也是非常常见的关系,比如,一个购物系统中,一个用户可以有多个订单,这是一对多的关系;一个订单中可以购买多种商品,一种商品也可以属于多个不同的订单,订单和商品就是多对多的关系。对于数据库中多对多关系建议使用一个中间表来维护关系,中间表中的订单d作为外键参照订单表的id,商品id作为外键参照商品表的id。 下面我们就用一个简单示例来看看MyBatis怎么处理多对多关系。 首先,在数据库创建三个表:TB_USER、TB_ARTICLE和TB_ORDER,再创建一个中间表维护TB_ART

m0_60721514的博客 836

Mybatis框架详解(全)

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。

swy2560666141的博客 8466

FOC电机控制实战:增量式编码器零位校准的5个关键步骤(附STM32代码)

本文详细解析了FOC电机控制中增量式编码器零位校准的5个关键步骤,包括电角度锁定、定时器计数清零、机械偏移角补偿等,并提供了STM32平台的实战代码。通过精准的零位校准,可显著提升电机控制系统的精度和稳定性,适用于工业伺服和机器人关节等高精度场景。

rum55的博客 616

weblogic启动异常故障处理(boot认证失败)

root 用户生成的文件属主为 root,WebLogic进程将无权读取,直接导致认证失败。· ⚠️ 密码必须完全一致:第3步 AdminAccount 命令中设置的密码,与第5步所有 boot.properties 文件中 password= 字段的值,必须保证完全一致。如果您的域下配置了受管服务器实例(如 ms_server1、ms_server2 等),必须逐一更新各实例下的免密启动文件,确保实例重启时密码与AdminServer保持一致,否则实例启动会因认证失败而报错。此步骤至关重要,必须执行。

weixin_53389944的博客 220

MyBatis架构原理

一、架构整体设计 功能架构讲解: 我们把Mybatis的功能架构分为三层: (1)API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。 (2)数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。 (3)...

sinat_34814635的博客 3092

Java开发者必看:Apache PDFBox实现PDF数字签名完整指南(附源码)

本文为Java开发者提供了使用Apache PDFBox实现PDF数字签名的完整指南。详细介绍了从环境配置、核心原理到完整代码实现的全过程,涵盖证书管理、签名位置计算、性能优化及实际应用案例,并附有可直接复用的源码,帮助开发者高效集成PDF数字签名功能。

o1p2q3r的博客 339

一文讲清Mybatis架构

MyBatis功能架构设计 功能架构讲解: 我们把Mybatis的功能架构分为三层: API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。 基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上

Javaesandyou的博客 1642

CPU 访问外设的两种核心机制:MMIO(Memory-Mapped I/O) 和 DMA(Direct Memory Access)

BAR和DMA是计算机系统中两种关键的数据传输机制:BAR(基址寄存器)用于CPU与设备间的控制通信,映射设备寄存器便于配置操作;而DMA(直接内存访问)允许设备直接读写系统内存,无需CPU参与大量数据传输。典型场景如NVMe SSD读取数据时,CPU通过BAR下发指令,设备通过DMA高效传输数据到主机内存,最后中断通知CPU。虽然BAR能映射大内存空间,但仍无法替代DMA的高效数据传输功能,两者各司其职——BAR负责控制,DMA专注数据传输,共同实现高性能的硬件交互。

MHD0815的博客 237

Python散点图(Scatter Plot):高阶分析、散点图矩阵、三维散点图及综合应用

散点图作为一种直观且功能强大的数据可视化工具,在数据分析中具有广泛的应用。通过观察散点图中数据点的分布模式,我们可以轻松地判断变量之间是否存在相关性,以及相关性的类型和强度。同时,散点图也是识别数据集中异常值的有效工具,无论是通过直观观察还是结合统计方法,都能帮助我们发现数据中的异常情况。掌握散点图的绘制和分析技巧,将使我们在数据探索和决策制定中更加得心应手。

SiArch的博客 1443

《MyBatis 全网最详精讲:从入门到实战,一篇吃透主流持久层框架!》

本文全面详解 MyBatis 核心架构、执行流程、配置文件、映射文件、动态 SQL等高频考点与实战技能。从基础搭建到实际应用,图文 + 代码双讲解,面试能答深、工作能落地,是 Java 开发必学、面试必问的核心框架,看完彻底告别只会用不会讲的尴尬!

8年 Java 全栈开发经验,专注于后端架构、JVM 优化与面试实战。用硬核源码解析 + 实战案例,帮你从基础到进阶,吃透 Java 核心。 1万+

PCL 加权局部最优投影(WLOP)简化算法

WLOP算法是一种点云重采样方法,通过迭代优化实现点云均匀化和特征保留。算法包含数据项(加权平均位置保持几何特征)和正则化项(排斥邻近点实现均匀分布)两部分。代码实现基于PCL库,通过KD树加速邻域搜索,使用高斯权重函数计算点位置更新。参数包括输出点比例、邻域半径、正则化权重和迭代次数。该算法不依赖网格信息,适合处理大规模扫描数据的预处理优化。

点云侠的博客 628

《深入理解mybatis原理》 MyBatis的架构设计以及实例分析

传统的MyBatis 配置SQL 语句方式就是使用XML文件进行配置的,但是这种方式不能很好地支持面向接口编程的理念,为了支持面向接口的编程,MyBatis 引入了Mapper接口的概念,面向接口的引入,对使用注解来配置SQL 语句成为可能,用户只需要在接口上添加必要的注解即可,不用再去配置XML文件了,但是,目前的MyBatis 只是对注解配置SQL 语句提供了有限的支持,某些高级功能还是要依赖XML配置文件配置SQL 语句。(至于具体的MyBatis缓存机制,我将准备专门一篇文章来讨论,敬请关注~)

lvyuanj的专栏 1633

爬虫:一文掌握网站加密和混淆以及浏览器调试的技巧

面对加密和混淆技术的网站,传统的爬虫方法可能难以奏效。通过结合浏览器调试工具(如Puppeteer、Playwright)、代理工具(如Burp Suite、Fiddler)以及动态和静态分析技巧,可以深入理解网站的运行机制,绕过加密和混淆,实现有效的数据抓取。同时,务必注意合法合规,尊重目标网站的规则和用户的隐私,确保爬虫行为的正当性和可持续性。

数据知道的博客 9887

【20】方案管理器

方案管理器是Excel中一个非常强大且灵活的工具,适合用于多情景分析和比较。在复杂的决策过程中,它可以帮助用户快速管理和评估不同变量组合下的结果,从而优化决策过程。

学习,输出==》再学习再输出 1585

深入详解 Mybatis 的架构原理与 6 大核心流程

MyBatis 是 Java 生态中非常著名的一款 ORM 框架,目前在一线互联网大厂中应用广泛,Mybatis 已经成为了一个必会框架。如果你想要进入一线大厂,能够熟练使用 MyBatis 开发已经是一项非常基本的技能,同时大厂也更希望自己的开发人员深入了解 MyBatis 框架的原理和核心实现。从这个角度看,理解 MyBatis 原理,阅读 MyBatis 核心源码,这样更有利于提高职场竞争力。

weixin_74412978的博客 2087

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

深入剖析MyBatis的架构原理与核心机制

在企业级开发中,数据库操作是至关重要的一部分。而ORM(对象关系映射)框架的出现,大大简化了数据库访问的复杂性,提升了开发效率。**MyBatis** 作为一款轻量级的持久层框架,凭借其高效灵活的 SQL 映射功能,成为了开发者的首选。 本文将深入剖析 MyBatis 的核心架构原理,详细讲解其执行流程、动态 SQL 解析、缓存机制以及插件机制,帮助你全面掌握 MyBatis 的工作原理与实际应用。

fudaihb的博客 1651

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【Java进阶营】MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 图片描述 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper。可以说,了解了这四大核心,便可知 MyBatis 八九。 SqlSessionFactoryBuilder 从命名上可以看出,这个是

283

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

深入剖析MyBatis的架构原理

本文介绍了 MyBatis 的架构设计和主要构件,包括功能架构分为API接口层、数据处理层和基础支撑层。讨论了 MyBatis 的各构件之间的交互关系,并描述了 MyBatis 的总体流程:加载配置并初始化,接收调用请求,处理操作请求,返回处理结果。通过分析这些内容,可以更好地理解 MyBatis 的内部工作原理和流程。

远方的灯塔 1213

《深入理解mybatis原理》 MyBatis的架构设计以及实例分析

MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单、优雅。本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询实例,深入代码,来探究MyBatis的实现。

我的程序人生(亦山札记) 18万+

java 培训:MyBatis 的架构与原理分析

1 引言 本文主要讲解 JDBC 怎么演变到 Mybatis 的渐变过程,重点讲解了为什么要将 JDBC 封装成 Mybaits 这样一个持久层框架 。再而论述 Mybatis 作为一个数据持久层框架本身有待改进之处。 2 JDBC 实现查询分析 我们先看看我们最熟悉也是最基础的通过 JDBC 查询数据库数据,一般需要以下七个步骤: 加载 JDBC 驱动; 建立并获取数据库连接; 创建 JDBC Statements 对象; 设置 SQL 语句的传入参数; 执行 SQL 语句并获得查询结果;

javalingyu的博客 1701

【Java进阶营】Mybatis框架的搭建和基本使用方法

1.1MyBatis****的下载 最新yBatis可以在github官网上下载: https://github.com/mybatis/mybatis-3 1.2 Mybatis Jar****包 1.3MyBatis****工作原理 1.4Mybatis的整个的执行流程 MyBatis应用程序根据XML配置文件创建SqlSessionFactory,SqlSessionFactory在根据配置,配置来源于两个地方,一处是配置文件,一处是Java代码的注解,获取一个SqlSession。SqlSes

java364106的博客 189

MyBatis的工作原理

MyBatis 是一个功能强大的持久层框架,通过对 SQL 语句的精确控制和方便的映射配置,提供了一种灵活且高效的数据库访问方式。MyBatis 的工作原理主要围绕SqlSessionMapperExecutor这几个核心组件展开,通过配置文件和映射文件,将 Java 对象和数据库表有效地连接起来。MyBatis 通过动态代理、缓存机制、动态 SQL、插件机制等特性,极大地提升了数据库操作的简洁性和可维护性,同时保留了对 SQL 语句的完全控制权,适合于各种需要精细化控制 SQL 的场景。

Flying_Fish_roe的博客 3207

MyBatis实现原理

首先,您需要定义一个接口,代理将对其进行实现。下面不属于动态代理,定义一个类,封装对象反射执行方法/*** 目标对象*//*** 执行的方法*//*** 方法的参数*//*** 执行目标对象的方法*//*** 具体拦截处理,目标对象封装到Invocation*//*** 插入目标类,创建代理对象*/

m0_50149847的博客 2902
下一篇: 【Java进阶营】Java开发工程师最新面试题库系列——Mybatis框架部分(附答案)
Java进阶营小编
博客等级 码龄5年 1粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值