Mybatis框架梳理——更新中

news2024/12/26 15:20:13

Mybatis框架梳理

  • 前言
  • 1.ORM
  • 2.模块划分
    • 2.1 ORM的实现
    • 2.2 SQL的映射
    • 2.3 插件机制
    • 2.4 缓存机制
    • 2.5 其他
      • 2.5.1 用到的设计模式
  • 3. 愿景

在这里插入图片描述

前言

    如果让我聊一聊mybatis,我该怎么说呢?开发中时时刻刻都在用它,此时此刻,脑海中却只浮现ORM框架这几个字,再努力回想一下:通过MapperProxy动态代理完成mapper接口的查询,还有呢?哪怕能说出来,应该也是磕磕巴巴。
    我想起了学生时代做题的日子,看到题目就知道它考哪个点,从哪些刁钻的角度去考…大抵还是不熟悉或者对mybatis没有清晰的脉络,所以当需要对外产出的时候,才会东一点西一点,想到哪里说哪里。
    这也是我写博客的本意,希望通过不断地反问和梳理,加深自己对某个技术点的理解。后面会一个模块一篇文章分别去记录。

1.ORM

MyBatis它是什么?它是一个半ORM的持久层框架。

    持久层框架,这个很好理解,在需要对数据进行持久化存储的时候,MyBatis帮我们简化了持久化的过程。

那什么是ORM,半ORM又是什么呢?
    首先要知道什么是ORM,什么是ORM框架,然后再来说为什么说mybatis是半ORM框架。
    ORM全称Object-Relational Mapping,也就是对象关系的映射。这里的关系映射是指对象的属性与关系数据库中对应的表字段之间的关系映射。在面向对象的编程语言中,万物皆是对象,而ORM的作用就是负责建立对象属性与表字段之间的映射,修改表数据的某个字段直接变成更新对象的某个属性,极大简化了开发。

    知道了ORM,那么ORM框架的作用就呼之欲出了。要知道,框架嘛,肯定不止是帮我们完成关系映射这么一个功能,在我们编码过程中,ORM直接帮我们屏蔽了数据库层面,我们只需要操作对象就可以操作数据库,而不用编写SQL。比如Hibernate,我们可以通过定义方法名称来控制SQL的执行逻辑,比如selectByName,selectByAge…
    那么如果我的某个方法逻辑比较复杂,需要自定义SQL呢,这时就需要说说一Mybatis了。
    用过spring-JPA的都懂,那种令人发指的简便,用它和Mybatis对比来说明半ORM再好不过。之所以说Mybatis是半ORM框架,因为它也使用ORM中表字段和对象属性的这种映射来简化开发,但又没有完全屏蔽数据库层,允许开发者自定义SQL操作数据库。也正因为这种半ORM的设计,使用Mybatis在自定义SQL方法有极大的灵活性。

2.模块划分

    知道了MyBatis的半ORM框架的特性,这种认识太笼统宽泛了,笼统到听到的人表面“好好好”,内心想抽你。
    那么它有哪些核心的特性可以让它一直被广泛使用,又是如何实现这些特性的呢。稳住,莫慌!先简单回想一下,在平时使用Mybatis的过程中,用到了它的哪些功能。在不看源码的情况下,可以通过这些直观的功能对Mybatis进行简单的模块划分,做到心中有数。

  1. 首先肯定是ORM:对象属性与数据库字段的自动映射,它怎么做的?
  2. SQL的映射:就写了个mapper接口同名的xml文件,也没有实现类,怎么就直接查询了呢?
  3. 插件:分页插件都用过,还有一些自定义的拦截功能,怎么实现的?
  4. 缓存:Mybatis内置了缓存的支持

    上述功能是日常开发中普遍能接触使用的,最能直观感受Mybatis的功能模块划分。从这些模块入手,日常开发中的使用案例可以帮助我们更直观的理解Mybatis的功能实现和设计思想。至于其他模块如日志、配置等,学完这些后也不会很难。

2.1 ORM的实现

为了防止畏难情绪 劝退(劝退我自己,我担心写不下去O_o),从最简单的关系映射的实现开始梳理吧。


2.1MyBatis——ORM对象关系映射

2.2 SQL的映射

聊一聊Mybatis中的动态代理和SQL的映射过程


2.2Mybatis——代理与SQL映射

2.3 插件机制

JDK的代理机制如何实际运用?弄懂Mybatis插件机制的原理,相信你对JDK动态代理会有新的认识和理解。


2.3MyBatis——插件机制

2.4 缓存机制

日常开发中,我们使用缓存的方式:

  1. 使用JDK提供的集合将数据缓存在JVM中;
  2. 使用中间件将数据缓存在内存中。

而Mybatis的两级缓存设计刚好使用了这两种方式。


2.4Mybatis——缓存机制

2.5 其他

2.5.1 用到的设计模式

  • 工厂模式
    Mybatis——SqlSessionFactoryBuilder工厂模式

  • 模板方法模式:在执行 SQL 操作时,Executor 类提供了执行逻辑的模板,具体的 SQL 操作在 StatementHandler 中定义。

  • 策略模式:MyBatis 中的参数处理、结果映射等使用了策略模式。不同的处理逻辑(如不同的 ParameterHandler 和 ResultSetHandler)可以根据需要灵活切换。

  • 适配器模式:在不同的数据库或不同的 JDBC 驱动程序之间,MyBatis 通过适配器模式来统一接口。

3. 愿景

从提纲挈领的模块划分,到局部核心功能点的实现细节,希望自己的一些理解和梳理,能够帮助小伙伴们理解mybatis并构建自己的知识体系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2196666.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

揭秘:ARM 工业计算机缘何替代树莓派

工业自动化、物联网以及嵌入式系统等领域对高性能、稳定可靠的计算设备的需求日益增长。国产 ARMxy工业计算机的出现,为这些领域带来了新的机遇和选择。特别是那些采用国产芯片如全志、瑞芯微等,并支持 Ubuntu 系统的工业计算机,展现出了令人…

微信公众号菜单栏----第⑦篇

如果你是新手小白&#xff0c;请从微信公众号开发第一篇看起&#xff1a;微信公众号开发-接口配置信息&#xff08;第①篇&#xff09;_微信公众号 接口配置信息怎么设置-CSDN博客 代码&#xff1a; <?php// 获取菜单配置数据$menuConfig array(button > array(array(…

认知战认知作战:激发认知战战术分享热情的秘诀

认知战认知作战&#xff1a;激发认知战战术分享热情的秘诀 认知战认知作战&#xff1a;激发认知战战术分享热情的秘诀 关键词&#xff1a;认知战, 认知作战, 创造独特体验, 融入社交元素, 情感共鸣策略, 分享激励机制, 战略形象塑造, 个性化内容推荐,认知作战,新质生产力,人类…

Observability:使用 OpenTelemetry 自动检测 Go 应用程序

作者&#xff1a;来自 Elastic Damien Mathieu 使用 OpenTelemetry 检测 Go 应用程序可以深入了解应用程序的性能、依赖项和错误。我们将向你展示如何使用 Docker 自动检测 Go 应用程序&#xff0c;而无需更改应用程序代码。 在快节奏的软件开发领域&#xff0c;尤其是在云原生…

网络资源模板--Android Studio 通讯录App

目录 一、项目演示 二、项目测试环境 三、项目详情​编辑 四、完整的项目源码 一、项目演示 网络资源模板--通讯录App 二、项目测试环境 三、项目详情 首页 package com.example.addressbook.activity;import androidx.appcompat.app.AppCompatActivity; import androidx.c…

Qwen变体新成员加一,英伟达训练 NVLM-D-72B 视觉大模型

今天&#xff08;2024 年 9 月 17 日&#xff09;&#xff0c;我们推出了前沿级多模态大语言模型&#xff08;LLM&#xff09;系列 NVLM 1.0&#xff0c;它在视觉语言任务上取得了最先进的结果&#xff0c;可与领先的专有模型&#xff08;如 GPT-4o&#xff09;和开放存取模型&…

2024高校网络安全管理运维赛 wp

0x00 前言 本文是关于“2024高校网络安全管理运维赛”的详细题解&#xff0c;主要针对Web、Pwn、Re、Misc以及Algorithm等多方向题目的解题过程&#xff0c;包含但不限于钓鱼邮件识别、流量分析、SQLite文件解析、ssrf、xxe等等。如有错误&#xff0c;欢迎指正。 0x01 Misc 签到…

纯干货!一个白帽子挖漏洞经验细致分享_白帽子找漏洞一天能多少

不知道是不是很多人和我一样&#xff0c;每天刷着漏洞&#xff0c;看着自己的排名一位一位的往上提升&#xff0c;但是&#xff0c;但是。总感觉怪怪的&#xff0c;为什么别人刷的漏洞都是现金&#xff0c;而自己刷的漏洞都是给库币。别人一天为什么提交那么多漏洞&#xff0c;…

winform appconfig

文章目录 添加一个appconfig配置文件的结构读取写入 这是wiform自带的配置文件&#xff0c;格式为xml 其位置在程序根目录下 添加一个appconfig 首先默认情况下&#xff0c;winform会自动创建一个名叫appconfig的配置文件&#xff0c;位于程序根目录下 如果需要手动创建更多…

【路径规划】基于球面向量的粒子群优化算法(SPSO)

摘要 本文提出了一种基于球面向量的粒子群优化算法&#xff08;Spherical Vector-based Particle Swarm Optimization, SPSO&#xff09;用于解决路径规划问题。该算法通过球面坐标系表示粒子的位置更新&#xff0c;增强了搜索空间的探索能力和全局优化性能。通过与遗传算法&a…

浅析基于双碳目标的光储充一体化电站状态评估技术

摘要&#xff1a;全国碳市场拉开了我国能源结构加速转型的大幕&#xff0c;催生了光伏、储能和新能源汽车等一批绿色产业的兴起&#xff0c;同时随着利好政策扶植和消费者的青睐&#xff0c;光伏、储能和新能源汽车市场均加快发展。但传统的充电桩和光伏电站都是分开建设&#…

基于SSM的家庭理财系统的设计与实现

文未可获取一份本项目的java源码和数据库参考。 选题目的: 随着社会的进步&#xff0c;我国经济的快速发展&#xff0c;人们的生活水平提高了&#xff0c;现在人们已经不仅仅满足于能够吃得饱穿得好&#xff0c;现在的人们在想着如何丰富自己的精神世界&#xff0c;想着如何去…

Win11环境下 DELPHI 12.2 安装全过程

背景描述 DELPHI作为曾经的Windows原生开发的王者&#xff0c;DELPHI12.2可以实现Windows、Android、IOS、macOS、Linux的应用开发&#xff0c;现在还有少数企业使用&#xff0c;大多数用户是从传统D3/4/5/6/7坚持下来的爱好者&#xff0c;2ccc.com里有相关内容&#xff0c;但…

基于方块编码的图像压缩matlab仿真,带GUI界面

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 编码单元的表示 4.2编码单元的编码 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 下图是随着方块大小的变化&#xff0c;图像的压缩率以及对应的图像质量指标PSN…

QT使用websocket实现语音对讲

简介&#xff1a; 本文所描述的功能和代码&#xff0c;是基于QT的开发环境。在QT上使用websocket&#xff0c;接受和发送pcm音频&#xff0c;实现了语音对讲功能。经自测&#xff0c;该功能可以正常使用&#xff0c;以下是相关代码的分享。 void MainWindow::on_pushButton_Ope…

Linux学习笔记(七):磁盘的挂载与扩展

Linux学习笔记&#xff08;七&#xff09;&#xff1a;磁盘的挂载与扩展 在虚拟机环境中&#xff0c;当我们的存储空间不足时&#xff0c;添加一块新的硬盘显得尤为重要。 1. 新增磁盘 首先&#xff0c;你需要确保有一块物理磁盘或虚拟磁盘。在虚拟机管理器中&#xff0c;你可以…

1.4TB! 全台湾2024年三维建筑模型3DTiles数据

在今年1月13日&#xff0c;我写了一篇文章&#xff0c;详细介绍了了全台湾2023年三维建筑模型数据以及数据背景。隔了8个月之后&#xff0c;我对全岛建筑模型数据进行了更新,不仅在数量上有增长&#xff0c;而且数据显示性能也进行了优化&#xff0c;下面我针对对2024年数据进行…

探索Python文本处理的新境界:textwrap库揭秘

文章目录 **探索Python文本处理的新境界&#xff1a;textwrap库揭秘**一、背景介绍二、textwrap库是什么&#xff1f;三、如何安装textwrap库&#xff1f;四、简单函数使用方法4.1 wrap()4.2 fill()4.3 shorten()4.4 dedent()4.5 indent() 五、实际应用场景5.1 格式化日志输出5…

黑龙江等保测评详细指南

一、什么是等保测评&#xff1f; 等保&#xff08;信息安全等级保护&#xff09;是指根据信息系统的重要性和安全需求&#xff0c;对其进行分级保护的制度。黑龙江省的等保测评旨在评估信息系统的安全性&#xff0c;确保其符合国家和地方的安全标准。 二、等保测评的必要性 1…

OpenAI重磅发布Canvas:跟ChatGPT一起写作编程

现在是大半夜1点56&#xff0c;国庆第三天&#xff0c;我想睡觉&#xff0c;真的。 但是&#xff0c;ChatGPT更新了&#xff0c;虽然不是那种王炸级的新模型模型更新&#xff0c;但是更新了一个极度优雅&#xff0c;对普通人极度友好的功能。 而且&#xff0c;顺带&#xff0…