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

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.mrgr.cn/news/42133.html

相关文章:

  • 【网络原理】Udp报文结构,保姆级详解,建议收藏
  • java_数据类型
  • C语言复习概要(一)
  • mysql安装及使用·1
  • vgg19提取特征
  • Vue.js 组件开发知识详解
  • 亚马逊云乱扣费,被不知不觉扣钱真的好气呀
  • C--编译和链接见解
  • 指针——字符指针
  • 【大数据】Doris 数据库与表操作语法实战详解
  • 【Docker从入门到进阶】04.高效实践
  • 实用技能分享!推荐最适合论文写作的5款ai工具
  • 论文提纲怎么写?分享5款AI论文写作软件
  • Docker 启动 PostgreSQL 主从架构:实现数据同步的高效部署指南
  • 计算机视觉与深度学习 | 从激光雷达数据中提取地面点和非地面点(附matlab代码)
  • 基于STM32的智能家居灯光控制系统设计
  • TCN模型实现电力数据预测
  • 【Orange Pi 5 嵌入应用编程】-用户空间I2C通信
  • 滑动窗口+动态规划
  • 【课程学习】Wireless Communications