【十一】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设备,对用户的接口是应用专用的 通常将嵌入式计算机系统简称为嵌入式系统。 嵌入式系统是以应用为中心,以计算机技术为基础、软件硬件可裁剪、…

记录一下如何腾讯云服务器用客户端连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…

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系统对接为例,详细解析双方在人员信息、组织架构、销售合同、付款申请、报…

快速探索随机树-RRT

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

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

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

python数据结构与算法之线性表

1、线性表 是一种由n个元素(n> 0 )数据元素组成的有限序列,所包含的元素数量通常被称为表的长度 n 0 的表被称为空表,线性表的数据元素可以单一也可以复杂,可以是整数,字符串,也可以是由几…

进程间通信--管道

1.有名管道 管道的分类:有名管道和无名管道 有名管道也成为命名管道.区别:有名管道在任意两个进程之间通信,无名管道在父子进程之间通信. 1.创建有名管道使用命令:mkfifo 2.打开管道:open(); 关闭管道:close(); 读数据:read(); 写入数据:write(); 2.有名管道来演示进程间通信:…

高光谱遥感数据处理与机器学习深度应用

高光谱遥感数据处理的基础、python开发基础、机器学习和应用实践。重点解释高光谱数据处理所涉及的基本概念和理论,旨在帮助学员深入理解科学原理。结合Python编程工具,专注于解决高光谱数据读取、数据预处理、高光谱数据机器学习等技术难题,…

将自己的项目上传至Git

一、安装Git 官网:Git (git-scm.com) 二、注册gitee 官网:工作台 - Gitee.com 进入“我的”出现以下界面 三、创建仓库 点击加号,新建仓库 根据自己的需求取名,描述仓库,开源还是私有,点击创建即可,点击我的即可…

[docker] 核心知识 - 容器/镜像的管理和操作

[docker] 核心知识 - 容器/镜像的管理和操作 想要查看完整的指令,可以通过 docker --help 列举所有的指令,这里会提到一些比较常用的核心指令 查看容器的状态 这个应该是最常用的指令,语法为 docker ps, ps 为 process status …

RT-Thread时钟管理

操作系统需要通过时间来规范其任务,主要介绍时钟节拍和基于时钟节拍的定时器。 时钟节拍 任何操作系统都需要提供一个时钟节拍,以供系统处理所有和时间有关的事件,如线程的延时、线程的时间片轮转调度以及定时器超时等。 RT-Thread 中,时钟节拍的长度可以根据 RT_TICK_P…

租用马来西亚服务器:稳定高效的网络选择

马来西亚首都是吉隆坡。作为一个新兴的多元化经济国家,也属于亚洲四小龙之一。地理位置优越,中间隔着南中国海。一部分是北接泰国的位于马来半岛的西马来西亚,另一部分则是东马来西亚,在婆罗洲岛的北部。这种地理位置有利于促进该…

IGBT退饱和现象解析与防范

IGBT是一种重要的功率半导体器件,广泛应用于电力电子领域,如变频器、电动机驱动、电力传输等。在这些应用中,IGBT的导通和关断特性至关重要,而退饱和是IGBT工作过程中的一个重要现象。 IGBT的退饱和定义 退饱和是指IGBT在导通状态…