Mybatis的前世今生

MyBatis从前世到今生一网打尽(全网最全,建议收藏) 一、框架概述 1.1 软件开发常用结构 1.1.1、三层架构 三层架构包含的三层: 界面层(User Interface layer) 业务逻辑层(Business Logic Layer) 数据访问层(Data access layer) 三层架构分别的职责是: 界面层(表示层,视图层):主要功能是接受用户的数据,显示请求的处理结果。使用 web 页面和 用户交互,手机 app 也就是表示层的,用户在 app 中操作,业务逻辑在服务器端处理。 业务逻辑层:接收表示传递过来的数据,检查数据,. 阅读详情

一、MyBatis的简介

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。

MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录.

二、MyBatis的历史

原是apache的一个开源项目iBatis, 2010年6月这个项目由apache software foundation迁移到了google code,随着开发团队转投Google Code旗下,ibatis3.x正式更名为Mybatis ,代码于2013年11月迁移到Github。

iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)

三、MyBatis的基本说明

(1)、MyBatis是一个工作在持久层的框架,它不再是一个标准的ORM框架

我们先看看Hibernate是如何对数据库进行操作

image

我们再来看看Mybatis如何对数据库进行操作

因为它只管理了SQL语句和Java之间的关联和映射,生成的实体类将不会自动创建表了,而是我们程序员自己去创建,你这边写的SQL语句是自己写,而不是Hibernate通过save或者delete帮助我们进行创建。

(2)、前身是ibatis, 在ibatis3.x 时,更名为 MyBatis

所以说,在面试或者开发的时候会听到IBatis,MyBatis,其实指的是一个东西。

(3)、MyBatis在java和sql之间提供更灵活的映射方案,MyBatis将sql语句和方法实现,直接写到xml文件中,实现和java程序解耦

为何这样说,MyBatis将接口和SQL映射文件进行分离,相互独立,但又通过反射机制将其进行动态绑定。

其实它底层就是Mapper代理工厂[MapperRegistry]和Mapper标签映射[MapperStatement],它们两个说穿了就是Map容器,就是我们常见的HashMap、ConcurrentHashMap。

在后面我会具体分析MyBatis四大组件的工作原理。

所以说,MyBatis使用面向接口的方式这种思想很好的实现了解耦和的方式,同时易于开发者进行定制和扩展,比如我们熟悉的通用Mapper和分页插件pageHelper,方式也非常简单,后面会详细进行说明。

(4)、 mybatis只负责sql, 建库建表的工作由程序员完成

在使用Hibernate的时候,建表的工作也是由框架帮助我们完成,Hibernate本身就是一个全自动的框架,MyBatis是一个半自动的框架,建表在很多时候我们需要对数据类型和字段进行更信详细的定义和分析,所以说,在实际的生产环境中,MyBatis的这种方式更加符合开发者的习惯

小结:Hibernate相对MyBatis的差异化和区别

(1).Hibernate是一个标准的ORM框架,MyBatis不再是一个标准的ORM框架,它工作在持久层

(2).Hibernate是一个全自动的框架,MyBatis是一个半自动的框架

(3).Hibernate将对数据库的操作全封闭化,MyBatis将其透明化[SQL编写]

(4).MyBatis相对Hibernate来说更加优秀,更加流行

(5).Hibernate是一个重量级的框架,MyBatis相对来说更加轻量级,类似Struts2和SpringMVC

(6).Hibernate的学习成本更高,MyBatis相对来说更低

(7).从耦合度来说,MyBatis实现了最大程度化的解耦,通过面向接口的方式来进行解决

MyBatis很好的借鉴了Hibernate的好的一面,那就是查询后将数据结果集映射的封装工作还是交给我来完成,编写SQL由你自己去完成,处理复杂的自定义结果集映射的权利也交给你来做。

简单的工作封装交给我来做,所以说,这对于Hibernate来说是致命的,因为Hibenate将对表的操作转换为对对象的操作,只需通过操作对象就能帮助我们发送SQL,这是它本身最大的特点优势。

但是,所有的操作都受限于让Hibernate本身来完成,Hibernate最大的优势反而变成了劣势,试想,一位优秀的DBA,对原生的SQL进行了优化,但受限于Hibernate本身的特性,有种浑身无力使的感觉,这也注定Hibernate被MyBatis取代只是时间问题。

四、为什么要使用MyBatis?

MyBatis是一个半自动化的持久化层框架。

jdbc编程—当我们使用jdbc持久化的时候,sql语句被硬编码到java代码中。这样耦合度太高。代码不易于维护。在实际项目开发中会经常添加sql或者修改sql,这样我们就只能到java代码中去修改。

Hibernate和JPA

长难复杂SQL,对于Hibernate而言处理也不容易

内部自动生产的SQL,不容易做特殊优化。

基于全映射的全自动框架,javaBean存在大量字段时无法只映射部分字段。导致数据库性能下降。

对开发人员而言,核心sql还是需要自己优化

sql和java编码分开,功能边界清晰,一个专注业务、一个专注数据。

可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO映射成数据库中的记录。成为业务代码+底层数据库的媒介

五、动态SQL映射

如果说MyBatis的SQL映射,接口和文件分离这种方式决定了MyBatis的优势,那么MyBatis的动态SQL直接决定了MyBatis它绝对的霸主地位,我们知道后端几乎都是Spring家族的天下,那么它肯定想过使用自家的产品将MyBatis淘汰,它确实做过,但是没有干掉MyBatis,所有MyBatis借助这两大优势和特点,当然MyBatis还有很多优秀的地方,慢慢替代了Hibernate

在一个实际的项目中,sql语句往往是比较复杂的,为了满足更加复杂的业务需求,MyBatis的设计者,提供了动态生成SQL的功能,动态SQL就是根据不同的情况在同一个业务逻辑里面产生的SQL语句是变化的,也就是说根据实际的业务需求同样一段代码产生SQL语句是不一样的,。

在实际的开发中,我们会遇到比较复杂的业务需求,在这种复杂的业务需求中,我们可能需要发送好几个SQL语句才能够去处理的,那么如果我们可以对这个SQL语句进行适当的编程,那么这个SQL语句将会变得非常强大,那么比如说有些数据库是支持存储过程的,这个存储过程其实就是直接使用SQL语句来进行编程,可以根据你不同的情况动态的产生SQL语句

如果我们有相同的业务需求,在这个业务需求中有不同的情况,那我根据不同的情况在同一种请求里面产生的SQL语句也不一样即解决了你要学习存储过程的麻烦,而且存储过程整合起来也很痛苦,同时还解决了可以灵活的适用复杂的业务需求,所以这也是MyBatis优秀的原因,也是它为何能够流行起来

MyBatis它研究了很多地方,让程序更加灵活,它能够设计一个产品,快速的简洁的解决一些需求这才是最好的,这些其实他也能解决,写一个存储过程即可,但是存储过程一些,代码的复杂度又变高了

MyBatis就让你在Mapper里面可以使用if,for循环,多分支语句根据不同的情况产生不同的SQL语句,这就是MyBatis厉害的地方

所以MyBatis在一定程度上就有点把Hibernate就让它有点受不了的地方,因为MyBatis业务需求设计的太好了,这也是目前SSM为何比SSH更流行的原因所以大家一看,好多年解决的问题,设计的问题别人都帮助我们进行了解决,没有理由不用它

哪怕现在流行的分布式和微服务架构,在持久层来说,很大程度上还是使用MyBatis来做持久层,虽然越来越多的项目都是基于SpringBoot,但持久层还是Mybatis用的非常多

image

MyBatis为何在一定程度上它能够让大家喜欢,用它,就是他让以前的工作变得更加简单容易,而不是变得更难了,如果一样东西变得越来越难,那就没人用它

但是随着技术的发展,将来还会有更好的框架来替代MyBatis,这是肯定的,技术本身就是要不断发展的,如果技术不再发展了,那么我们程序员的价值就会大大降低,因为不需要在学习了,几次互联网的高潮都是由于新技术的产生.导致程序员的薪水大幅度增长

六、总结

我们通过不同的角度去分析,通过和同期的竞争对手以及在实际的生产环境中,MyBatis都是很优秀的一个持久层框架,我们必须好好学习并掌握它,不光是它的使用,以及它底层的基本原理,这些放在后面会详细介绍,应大家要求,编写MyBatis系列的文章,同时也非常感谢大家的支持!

 

针对于上面所涉及到的知识点我总结出了有1到5年开发经验的程序员在面试中涉及到的绝大部分架构面试题及答案做成了文档和架构视频资料免费分享给大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料),希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习,也可以关注我一下以后会有更多干货分享。

添加我的微信号 neteasestudy 即可免费获取Java架构学习资料哦!
欢迎加入我的微信群和大家一起讨论专研技术!群内技术点有里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatisNetty,Redis,Kfka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料,以及不定期的内推BAT企业!希望大家共同努力,构建一个自己的人脉交流圈!
 

 

 

 

MyBatisPlus快速入门(一)MyBatisPlus简介、历史和优势 本文是MyBatisPlus快速入门专栏的第一篇,对MyBatisPlus简介、历史和优势进行讲解,让同学们对MyBatisPlus有一个初步映像。 阅读详情

相关推荐

用Python玩转共现分析:从NLTK到热力图可视化(附完整代码)

本文详细介绍了如何使用Python进行文本共现分析,从NLTK基础文本处理到构建共现矩阵,并实现热力图可视化。通过完整的代码示例,帮助数据分析师和开发者掌握这一揭示词语间关联网络的实用NLP技术,快速从文本中提取语义关系和主题结构。

weixin_29313817的博客 347

Mybatis前世今生

一、Mybatis相关概念 1.对象/关系数据库映射(ORM) ORM全称Object/Relation Mapping:表示对象-关系映射的缩写 ORM完成面向对象的编程语言到关系数据库的映射。当ORM框架完成映射后,程序员既可以利用面向 对象程序设计语言的简单易用性,又可以利用关系数据库的技术优势。ORM把关系数据库包装成面向对 象的模型。ORM框架是面向对象设计语言与关系数据库发展不同步时的中间解决方案。采用ORM框架 后,应用程序不再直接访问底层数据库,而是以面向对象的放松来操作持久化对象,而ORM

mingluo1的博客 552

虚拟机器人平台CoppeliaSim(Vrep)的逆运动学教学

相信看这篇博客的人都知道CoppeliaSim是做什么的,因此这里不多赘述。CoppeliaSim从最早的Vrep到现在已经更新了N个版本,从过去Vrep3.x开始使用的我这里小小地吐槽一下这个软件。CoppeliaSim每一个版本都有更新,问题是这些更新有时候不能向前兼容,而且时不时更新地让人不知所措(对于有紧急任务的时候真的很火大啊)。 以本文所展示地逆运动学来说,CoppeliaSim在4.0.0之后又大变,推翻了过往所有的拖动模块链接之类的构建方式,转而采用直接通过代码来实现逆运动学。 简单版逆运动

qq_39243015的博客 6698

【MyBatis】MyBatis的前世今生与环境搭建

讲解MyBatis的前世今生与环境搭建

只想和你一起进步 1517

基恩士数字光纤放大器

在2路输出类型上此为通道开关,并未配备0路类型;设置已搞不清楚不知道怎么办时···完成初始化后,模块重新显示当前值。①无工件时短按[SET]①有工件时短按[SET]各部位的名称和基本操作。可以手动微调设置值。

大小曲奇的博客 1万+

STM32实战:5分钟搞定MXL90614红外测温模块的I2C驱动(附完整代码)

本文提供了一份快速集成MLX90614红外测温模块的STM32实战指南。通过详细的软件I2C驱动代码,重点解析了SMBus通信协议、CRC校验及温度数据转换,帮助开发者避开常见陷阱,实现5分钟内完成模块驱动并读取准确温度值。

wasm7browser的博客 353

什么是Mybatis?一文搞懂MyBatis前世今生!

前期提要 本系列Mybatis笔记基于mybatis3.5.2 , https://github.com/mybatis/mybatis-3/releases/tag/mybatis-3.5.2中有详细的文档说明,可以进行下载阅读,本文只是对Mybatis的一些常用操作进行汇总总结。 推荐视频资料:https://www.bilibili.com/video/BV1VP4y1c7j7?p=1 所需前提:对maven有些了解。(maven v3.6.1) MyBatis系列文章索引页✋ 本文目录 文章目录

写写平时的技术与感想 1796

使用 MATLAB/Simulink 构建一个分布式光伏-储能联合系统在配电网中的协同控制模型

本文介绍了使用MATLAB/Simulink构建分布式光伏-储能联合系统协同控制模型的方法。该系统包含光伏发电、储能、负荷和控制器等模块,通过协同控制实现能量优化管理。建模过程详细说明了从创建项目、搭建组件到实现控制策略的步骤,包括光伏特性模拟、储能参数设置和负荷需求建模。重点设计了协同控制器算法,实时调节电力分配,并展示了系统运行指标和经济效益分析。该方法为多能互补系统在配电网中的应用提供了技术验证,未来可进一步优化控制算法和场景适应性。

MHD0815的博客 309

「MyBatis」MyBatis的前世今生与环境搭建

MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生类型、集合接口以及Java的POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

他很懒,但也在努力的生活着 141

Halcon实例转OpenCVSharp--粘连物体分割与计数(基于距离变换+分水岭算法) (附源码)

本文作者Color Space,文章未经作者允许禁止转载! 本文将介绍OpenCVSharp应用实例--粘连物体分割与计数(基于距离变换+分水岭算法)! 本文使用的OpenCVSharp版本---》v4.5.3。 实现目标:将下图中的硬币分割出来并计算数量。 预期效果图: ...

Color Space的博客 2419

第4章-上下文管理-对话历史记忆系统与窗口优化-《Agentic AI 智能体应用开发》

当上下文窗口接近极限时,需要对已有内容进行压缩。压缩不是简单的截断——你需要保留核心语义,去除冗余。# Python: 对话摘要压缩# 使用 Haiku 做摘要任务,成本最低"""将一段对话历史压缩为摘要"""system="你是一个对话摘要专家。请生成简洁但有信息量的摘要。",f"'用户'

AI天才研究院 245

搞懂MyBatis前世今生1.0-从入门到使用

MyBatis框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJO 映射成数据库中的记录。MyBatis中文网。

weixin_44954504的博客 1184

Python数据可视化 Pyecharts 制作 Map 地图

大家好,我是Mr数据杨。想象一下,作为一名军师,如诸葛亮或郭嘉,'Map’就如同那战争的沙盘,兵马行动的轨迹,都需要准确的地图作为基础。‘基本设置’,就如同摆设这张战争沙盘,规定棋子的起始位置。‘数据配置选项’和’地图数据项’,就好比是军师们手中的情报,了解各路诸侯的兵力、粮草、地形等重要信息,以便于他们更好地布局。‘Demo’则代表着练兵之地,军师们可以在此基于已有数据,试验各种战术。

Mr数据杨 4万+

mybatis包含字符串_mybatis的前世今生(1)

(来源于https://mybatis.org/mybatis-3/)mybatis简介MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。MyBatis是一流的持久性框架,支持自定义SQL,存储过程和高级映射...

weixin_39630441的博客 1343

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【MyBatis技术内幕】MyBatis快速入门

由于用户自定义插件会影响MyBatis的核心行为,在使用自定义插件之前,开发人员需要了解MyBatis内部的原理,这样才能编写出安全、高效的插件。拼凑SQL语句是一件繁琐且易出错的过程,为了将开发人员从这项枯燥无趣的工作中解脱出来,MyBatis实现动态SQL语句的功能,提供了多种动态SQL语句对应的节点,例如,节点、节点等。MyBatis中的scripting模块会根据用户传入的实参,解析映射文件中定义的动态SQL节点,并形成数据库可执行的SQL语句。

qq_38149054的博客 687

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Mybatis基础入门(一)——概览

Mybatis基础入门(一)——概览

李黎敏 ——为优秀j2ee架构师而努力 2653

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

MyBatis的由来

MyBatis笔记(一): 1.MyBatis介绍         MyBatis 本是 Apache 的一个开源项目 iBatis,2010年这个项目由 Apache Software Foundation 迁移到了Google Code,并且改名为 MyBatis 。2013年11月迁移到 Github。    ...

扛麻袋的少年的博客 4073

Mybatis的认知与使用

问前世今生,言了了自述 MyBatis的前身是Apache下的一个开源项目ibatis,后在2010年迁移到Google,更名为Mybatis,又于2013年迁移到 Github。 它是一种半自动的ORM框架,它不是直接建立Java对象到关系数据库表的数据的映射,而是建立在对Java对象的操作方法到sql语句之间的映射关系上,所以,它让使用者可以自由编写SQL、存储过程、视图等等,使用者自己编写的高效SQL会让项目的执行更优化。MyBatis依靠XML文件配置映射关系,通过XML+接口的方式实现增删改查。

worshipme的博客 389

Mybatis快速入门1-----[浅谈mybatis]

工作累了想好好的写下博客了,本次博客--mybatis我会在十天内写完,每篇我都会详细介绍它的妙处,篇幅不多在于精华。正在学习的博友希望持续关注。 1.闲谈 mybatis的前身是Apache的一个开源项目iBatis,后来项目迁移到google code改名叫Mybatis,它叫什么不重要,重要的我们会用它要知道它的优势在哪里和它的原理是什么?在iBatis之前有一个Ejb不知道大家听说过没

野狼的博客 367

MyBatis框架之基本知识介绍

前身背景: 前身是iBatis,为Apache的一个开源项目。2010年迁移到了Google Code,改名为MyBatis.2013年迁移到Github。 MyBatis框架以及ORM MyBatis是一个开源的数据持久层框架,内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射。作为持久层框架,主要思想是将程序中的大量的...

weixin_30556959的博客 144
上一篇: 详解Java线程池
下一篇: 分享30道Redis面试题,面试官能问到的我都找到了
刀哥谈Java
博客等级 码龄8年 110粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值