MyBatis和MyBatis-Plus的差别和优缺点

MyBatis和MyBatis-Plus的主要差别在于功能和特性方面。MyBatis是一个优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects, 普通的Java对象)映射成数据库中的记录。

然而,MyBatis-Plus(简称MP)是MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus提供了更加丰富的功能特性,如分页插件、代码生成器、注解支持等。编码方式上,MyBatis在进行数据持久化时需要编写大量的XML配置文件和SQL语句,需要熟悉XML和SQL的编写规范。而MyBatis-Plus使用注解和API的方式进行数据持久化,使用更加便捷和简洁。性能和效率方面,MyBatis-Plus在功能扩展的同时也对性能进行了优化,提供了高效的SQL语句构建和执行功能,并支持动态SQL语句生成,从而提高了应用的性能和效率。

至于优缺点,MyBatis的优点包括:

  1. 简单易学:MyBatis本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个Sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
  2. 灵活:MyBatis不会对应用程序或者数据库的现有设计强加任何影响。SQL写在XML里,从Java代码彻底分离,便于统一管理;提供XML标签,支持编写动态SQL。并且要调整SQL语句非常方便,无需要改变Java代码。
  3. 解除数据库耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。DAO层封装了数据访问细节,调用者只需要关心参数和返回值,无需关注内部实现。
  4. 提供映射标签,支持对象关系映射的映射过程中,对象属性的命名和数据库字段的命名也可以通过映射文件进行匹配,而不需要修改Java代码。
  5. 提供XML标签,支持编写动态SQL。并且要调整SQL语句非常方便,无需要改变Java代码。

MyBatis的缺点包括:

  1. SQL语句的编写工作量较大,尤其是当字段多、关联表多时,对开发人员编写SQL语句的功底有一定要求。
  2. SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

至于MyBatis-Plus的优缺点,优点主要包括:

  1. 提供了分页插件,开发者无需关心具体操作,配置好插件之后,写分页等同于普通List查询。
  2. 提供了代码生成器,可以通过代码来自动快速生成Mapper、Model、Service、Controller层代码,大大减少了开发者的开发量。
  3. 支持全局通用方法注入,可以减少重复的代码编写。
  4. 提供了多种主键策略,支持多达4种主键策略(内含分布式唯一ID生成器),可自由配置,完美解决主键问题。
  5. 支持关键词自动转义,支持数据库关键词(order、key…)自动转义,还可自定义关键词。

至于MyBatis-Plus的缺点,主要在于其过于依赖Mybatis以及Mybatis-Spring,如果要实现多表联查的业务需求,会比Mybatis更加复杂。此外,项目引入第三方插件包,未来升级有一定的兼容性问题。

总的来说,MyBatis和MyBatis-Plus各有其优点和适用场景,选择使用哪个框架取决于项目的具体需求和开发团队的实际情况。

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

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

相关文章

【前端】CSS

定义:层叠样式表 Cascading Style Sheets,控制页面的展示效果 1.基本语法规范 选择器 1/n条声明 选择器决定针对谁修改声明决定修改啥声明的属性是键值对,使用 ; 区分键值对,使用 : 区分键和值 2.格式 style标签可放在head标…

android开发学习-内容共享(server+client)

在应用之间共享数据 通过ContentProvider封装数据 ContentProvider使用的Uri语法结构如下: content://authority/data_path/id content:通用前缀,表示该uri用于ContentProvider定位资源 authority:是授权者名称,用…

【Python--读获取目录下所有csv文件中的均值与偏态】

🚀 作者 :“码上有前” 🚀 文章简介 :Python 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 python练习题 读获取目录下所有csv文件中的均值与偏态按照均值和偏态最大值进行排序完整代码 读获取目录下…

基于OpenCV的图形分析辨认03

目录 一、前言 二、实验目的 三、实验内容 四、实验过程 一、前言 编程语言:Python,编程软件:vscode或pycharm,必备的第三方库:OpenCV,numpy,matplotlib,os等等。 关于OpenCV&…

LeetCode.2917. 找出数组中的 K-or 值

题目 2917. 找出数组中的 K-or 值 分析 这道题其实是要我们求第i位二进制为1的元素个数至少为k,把符合条件的2^i全部加到一起。 因此,我们的思路就是枚举数组的每一位,并且进行以下两个步骤: 统计所有元素第i位1的个数cnt。…

ubuntu 中进入python 编辑如何退出到命令行

文章目录 在Python解释器(交互式命令行)中,你可以使用 exit()函数或 CtrlD(在Unix/Linux/macOS上)或 CtrlZ然后输入 Enter(在Windows上)来退出Python解释器并返回到命令行。 以下是具体的步骤&a…

SpringSecurity配置MD5加密方式

目录 一、需求 二、代码实现 2.1、MD5加密工具类 2.2、实现MD5加密

【论文阅读】DeepLab:语义图像分割与深度卷积网络,自然卷积,和完全连接的crf

【论文阅读】DeepLab:语义图像分割与深度卷积网络,自然卷积,和完全连接的crf 文章目录 【论文阅读】DeepLab:语义图像分割与深度卷积网络,自然卷积,和完全连接的crf一、介绍二、联系工作三、方法3.1 整体结构3.2 使用空间金字塔池…

弹性地基梁matlab有限元编程 | 双排桩支护结构 | Matlab源码 | 理论文本

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现,并提供所有案例完整源码;2.单元…

mysql bug( InnoDB: Error number 22),表突然不能读取

mysql bug( InnoDB: Error number 22),表突然不能读取 bug最开始的bug:表突然不能读取关闭mysql容器,再次重启失败 解决方案不重建容器的几种可能措施重建容器重建如果懒得打命令或者忘记命令可能的run bug&#xff1a…

【目标检测】旋转目标检测DOTA格式转YOLO格式标注

准备DOTA格式数据集: dota_dataset -- images |----- train |----- val -- labels |----- train |----- train_original |----- val |----- val_original 修改class_mapping和图片格式: ultralytics/data/converter.py convert_dota_to_yolo_obb() 转换标…

从零学算法128

128.给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入:nums [100,4,200,1,3,2] 输出:4…

打破界限,释放创新:一键将HTML转化为PDF

在互联网时代,HTML作为网页的标准语言,承载着无数的信息与创意。然而,有时我们需要将这些在线内容转化为可打印、可分享的PDF格式。这时,一款高效、便捷的转换工具就显得尤为重要。 首先,我们要进入首助编辑高手主页面…

API分享:淘宝拍立淘API接口|按图搜索商品列表API|电商爆品搜索API

今天来跟大家分享一个非常有用的API,以图搜索商品列表API:item_search_img。通过此API可以实现传入一个图片链接,来获取到该图片上的商品信息,商品列表,支持翻页展示。 item_search_img-按图搜索淘宝商品(…

Linux内核基础 - list_move_tail函数详解

Linux Kernel list_move_tail 函数 技术背景 Linux内核使用双向链表来管理各种数据结构。这种双向链表的实现使得元素的插入和删除操作非常高效,特别是在需要频繁修改链表结构时。list_move_tail函数是这种双向链表操作中的一个,用于在链表中移动节点。…

react高阶组件:如何同时兼容class类组件和函数式组件。

场景: 每个页面都要实现分享功能,但是页面有些是用class类,有些又直接是函数式。 方案1: 写2套方法。各自引用。(维护不太好,改要改2遍) 方案2: 可以封一个 jsx的组件&#xff0c…

中国制造走向世界wordpress外贸建站模板主题

水泵阀门wordpress外贸网站模板 水泵、阀门、管材、管件wordpress外贸网站模板,适合外贸独立站的网站模板。 https://www.jianzhanpress.com/?p3748 保健器械wordpress外贸网站主题 保健、健身器械wordpress外贸网站主题,适合做外贸网站的wordpress模…

【QT C++实践】Qt 项目中一个界面动态处理多张数据库中的表|附源码

一、前言 在之前那篇讲如何使用QT连接数据库时(QT C实践|超详细数据库的连接和增删改查操作|附源码),做了一个简单的对数据库进行增删改查的界面(如下)。 但是存在一个问题就是:这个界面只是对一张表进行操作,但是我…

驱动调试第014期-变频调速的原理及相关计算公式应用

一、引言 变频调速是一种通过改变电源频率来实现电动机调速的技术。它具有高效、精确、可靠等优点,广泛应用于工业、商业和家用领域。本文将介绍变频调速的基本原理、优点以及应用领域,并通过详细的公式计算过程和图片说明来帮助读者更好地理解。 二、变…

2023年CSP-J认证 CCF信息学奥赛C++ 中小学初级组 第一轮真题-选择题解析

2023年 中小学信息学奥赛CSP-J真题解析 1、在C中,下面哪个关键字用于声明一个变量,其值不能被修改 A、unsigned B、const C、static D、mutable 答案:B 考点分析:主要考查变量声明相关知识,const是声明常量&…