当前位置: 首页 > article >正文

Mybatis框架梳理

Mybatis框架梳理

  • 前言
  • 1.ORM
  • 2.模块划分
    • 2.1 ORM的实现
    • 2.2 SQL的映射
    • 2.3 插件机制
    • 2.4 缓存机制
    • 2.5 其他
  • 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了。
    之所以说它是半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.2 SQL的映射

2.3 插件机制

2.4 缓存机制

2.5 其他

3. 愿景

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


http://www.kler.cn/a/331291.html

相关文章:

  • Pytorch | 从零构建MobileNet对CIFAR10进行分类
  • Linux中Mysql5.7主从架构(一主多从)配置教程
  • MES系统工作流的单元测试方案
  • 【读书笔记】《论语别裁》寂寞的享受
  • 多模态医学图像融合概述
  • 【jvm】主要参数
  • Netty从入门到精通:高性能网络编程的进阶之路
  • (11)MATLAB莱斯(Rician)衰落信道仿真2
  • VS与VSCode的区别
  • Linux基础(五):linux文件种类与扩展名
  • 车辆重识别(2020NIPS去噪扩散概率模型)论文阅读2024/9/27
  • C++《string》
  • 19.第二阶段x86游戏实战2-寻找寻路call
  • QT学习笔记1(QT和QT creator介绍)
  • ClickHouse 的 MergeTree 引擎有哪些性能优势?
  • Mybatis 学习之 分页实现
  • 在Ubuntu 20.04中安装CARLA
  • VMware ESXi 8.0U3b macOS Unlocker OEM BIOS 2.7 Dell HPE 定制版 9 月更新发布
  • 物流行业中的AI平台架构与智能化应用
  • 【计算机基础理论】图灵机(Turing Machine)
  • 以企业的视角进行大学生招聘
  • IT新秀系列:Go语言的兴起
  • 什么是 JWT?它是如何工作的?
  • jmeter学习(1)线程组与发送请求
  • 15分钟学 Python 第34天 :小项目-个人博客网站
  • 【H2O2|全栈】关于CSS(9)CSS3扩充了哪些新鲜的东西?(二)