【十一】MyBatis Plus 原理分析

MyBatis Plus 原理分析

摘要

        Java EE开发中必不可少ORM框架,目前行业里最流行的orm框架非Mybatis莫属了,而Mybatis框架本身没有提供api实现,所以市面上推出了Mybatis plus系列框架,plus版是mybatis增强工具,用于简化Mybatis的开发。本文主要是介绍mybatis plus这款增强工具,Mybatis-Plus则是全自动的ORM框架,按照开闭原则,在不影响Mybatis现有功能的情况下,实现了对Mybatis的功能增强,也是笔者使用和研究源码比较深的,同时也是市面上使用比较流行的,希望通过本文的介绍大家能够理解Mybatis plus的实现原理,同时加深大家对Mybatis的理解。

一、实现原理

        Mybatis plus是一个 Mybatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

        如下图所示是Mybatis plus的框架结构图:

​图1、框架结构        

        由上图所示,Mybatis plus主要由starter、annotation、extension、core、generator这几个模块组成,限于篇幅和本文主旨不对源码做讲解,本文主要是分析清楚mybatis plus的实现原理。如下图所示是mybatis-plus和mybatis的关系:

图2、mybatis-plus和mybatis的关系

在 MyBatis 的基础上只做增强不做改变,那么做了哪些增强呢?我们使用最多的应该是CRUD 接口方面的功能了,这里将主要讲解CRUD 接口方面的实现原理。

        mybatis-plus提供了Service CRUD 接口和Mapper CRUD 接口,这里主要以 insert(T entity) 为例来进行说明,其他接口实现相通。

图3、insert接口实例

        这里我们需要关注一下几个类:

这三个类分别对应mybatis中的以下三个类:

MybatisMapperProxyFactory为代理实例创建工厂、MybatisMapperProxy实现用来来定义代理对象的行为,MybatisMapperMethod的功能是执行SQL的相关操作。

通过debug我们发现insert的方法最终进入到如下方法中:

继续跟进我们可以找到mybatis中对jdbc的封装

        到此Mybatis plus的原理讲完了,可以看到plus的底层是基于mybatis的,上层还是基于jdk的动态代理技术,只是在mybatis的基础上提供了丰富的CRUD 接口,另外在mybatis的基础上扩展了一些功能,如下图所示是plus的核心功能:

二、总结

        本文旨在讲解Mybatis Plus的实现原理,Mybatis-Plus相对于Mybatis来说,提供了更多的便捷功能,如自动分页、自动填充、通用Mapper等。这些功能可以大大减少开发者的工作量,提高开发效率。而Mybatis需要开发者自己编写这些功能,相对来说较为繁琐。

        写过一遍博客【五】从jdbc到mybatis看这一篇就够了_mybatis获取数据库连接-CSDN博客,jdb是orm框架的基础,Mybatis框架则是对jdbc规范的扩展,在熟悉了Mybatis之后我们感兴趣就可以来了解一下Mybatis生态相关的产品,而Mybatis Plus则是Mybatis框架的下游产品。

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

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

相关文章

嵌入式系统及应用-1.1嵌入式

嵌入式系统 定义:看不见的计算机,一般不能被用户编程,它有一些专用的I/O设备,对用户的接口是应用专用的 通常将嵌入式计算机系统简称为嵌入式系统。 嵌入式系统是以应用为中心,以计算机技术为基础、软件硬件可裁剪、…

transformer上手(6)—— 微调预训练模型

1 加载数据集 以同义句判断任务为例(每次输入两个句子,判断它们是否为同义句),构建我们的第一个 Transformers 模型。我们选择蚂蚁金融语义相似度数据集 AFQMC 作为语料,它提供了官方的数据划分,训练集 / …

记录一下如何腾讯云服务器用客户端连MySQL

我一般喜欢用IDEA连数据库,别问我为啥(就喜欢用一个软件解决所有问题) 当然写SQL语句个人还是觉得sqlyog体验最佳!

【C/C++】什么是内存泄漏?如何检测内存泄漏?

一、内存泄漏概述 1.1 什么是内存泄漏 内存泄漏是在没有自动 gc 的编程语言里面,经常发生的一个问题。 自动垃圾回收(Automatic Garbage Collection,简称 GC)是一种内存管理技术,在程序运行时自动检测和回收不再使用…

MySQL8.0.36-社区版:错误日志(3)

mysql有个错误日志,是专门记录错误信息的,这个功能默认是开启的 一般都是在/var/log/mysqld.log 日志中存放 1.错误日志的位置 首先我们使用命令去查看一下,这个错误日志文件究竟在哪 进入到mysql中,使用命令 show variables…

LeetCode热题Hot100 - 合并K个升序链表

一刷~ 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 思路: 逆天了- -困难模式一次过- - 第一反应,n个列表,两两合并,n-1次遍历即可,…

Spring容器初始化之前,利用SpringBoot监听器做一些数据库方面的检查

之所以把数据库的连接、结构、最小初始化等检查项放到SpringBoot监听器而不是Spring容器的初始过程。是有原因的。 1:SpringBoot监听器是SpringBoot初始化过程中,最先被执行的那一批周期函数。 2:数据库连接测试能很快的获得结果。 3&#xf…

FME学习之旅---day24

我们付出一些成本,时间的或者其他,最终总能收获一些什么。 高级地理数据库 教程:地理数据库转换 上述教程包括 如何使用 Esri 模板地理数据库 该内容在FME学习之旅day19 已经学习过 使用地理数据库属性域:编写编码属性域 属…

机器学习实训 Day1(线性回归练习)

线性回归练习 Day1 手搓线性回归 随机初始数据 import numpy as np x np.array([56, 72, 69, 88, 102, 86, 76, 79, 94, 74]) y np.array([92, 102, 86, 110, 130, 99, 96, 102, 105, 92])from matplotlib import pyplot as plt # 内嵌显示 %matplotlib inlineplt.scatter…

古月·ROS2入门21讲——学习笔记(一)核心概念部分1-14讲

讲解视频地址:1.ROS和ROS2是什么_哔哩哔哩_bilibili 笔记分为上篇核心概念部分和下篇常用工具部分 下篇:古月ROS2入门21讲——学习笔记(二)常用工具部分15-21讲-CSDN博客 目录 第一讲:ROS/ROS2是什么 1. ROS的诞生…

Python-GEE遥感云大数据分析、管理与可视化及多领域案例实践应用

随着航空、航天、近地空间遥感平台的持续发展,遥感技术近年来取得显著进步。遥感数据的空间、时间、光谱分辨率及数据量均大幅提升,呈现出大数据特征。这为相关研究带来了新机遇,但同时也带来巨大挑战。传统的工作站和服务器已无法满足大区域…

海外代理IP在跨境电商中发挥什么作用?

在我国跨境电商的发展中,海外代理IP的应用日益广泛,它不仅帮助商家成功打入国际市场,还为他们在多变的全球电商竞争中保持优势。下面是海外代理IP在跨境电商中五个关键的应用场景。 1、精准的市场分析 了解目标市场的消费者行为、产品趋势以…

金蝶云星空与泛微OA对接案例-实现流程一体化

摘要:在企业数字化中,集成内部各业务系统以实现数据共享与流程协同,已成为提升运营效率、优化决策的重要选择。本文将以某企业成功实现金蝶云星空与泛微OA系统对接为例,详细解析双方在人员信息、组织架构、销售合同、付款申请、报…

Java中数组的使用

在Java编程中,数组是一种非常重要的数据结构,它允许我们存储相同类型的多个元素。对于初学者来说,理解数组的基本概念、初始化、遍历、默认值以及内存分配和使用注意事项是非常关键的。 一、数组的概念 数组是一个可以容纳多个相同类型数据…

es 深入了解和索引生命周期管理

1.1 目标人群 适用人员:使用过ES (elasticsearch), 对 ES 有初步的了解,想要深一步深入学习的人 知识点:以 ES 索引生命周期为知识点,这一个月查看文档的初步收集 1.es 结构初识。 2. es 基础知识 3.es索引生命周期使用 1.3 ES…

快速探索随机树-RRT

文章目录 简介原理算法运动规划的变体和改进简介 快速探索随机树(RRT)是一种算法,旨在通过随机构建空间填充树来有效搜索非凸高维空间。该树是从搜索空间随机抽取的样本中逐步构建的,并且本质上偏向于向问题的大型未搜索区域生长。RRT 由 Steven M. LaValle 和 James J. K…

CommunityToolkit.Mvvm笔记---ObservableRecipient

ObservableRecipient 类型是可观察对象的基类,这些对象还充当消息收件人,是 ObservableObject 的扩展,它还对使用 IMessenger 类型提供内置支持。这使得在不直接引用其他组件的情况下,组件之间可以相互通信。在MVVM架构中&#xf…

面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!

时间片 超线程 上下文切换 切换查看 线程调度 引起线程上下文切换的因素 由于现在大多计算机都是多核CPU,多线程往往会比单线程更快,更能够提高并发,但提高并发并不意味着启动更多的线程来执行。更多的线程意味着线程创建销毁开销加大、…

AI系列:大语言模型的function calling

目录 大语言模型(LLM) 的function calling实验:OpenAI之function calling序列图:function calling如何工作详情: 对话内容参考代码 后续: 使用LangChain实现function calling参考 大语言模型(LLM) 的function calling 大语言模型(LLM)可以使用自然语言与…

Android中的Context

前言 在Android开发中,当我们要创建或启动四大组件时,不能通过简单的new关键字实现,而是要通过他们的上下文环境,也就是我们要讨论的Context。 Android的应用模型是基于组件的应用设计模式,而组件的运行需要一个完整…