百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

框架的本质分析——Mybatis(mybatys框架)

ccwgpt 2024-09-18 12:24 34 浏览 0 评论

诞生的背景

什么背景下诞生了该技术?

不论是哪个框架,不会平白无故诞生,不会平白无故的被人所追捧,了解其背景,追根溯源。

Mybatis也好、Ibatis也罢,本质都是一个ORM框架,那么ORM是什么?ORM在什么背景下诞生的呢?

ORM是什么?

ORM即对象关系映射。

ORM诞生背景

面向对象编程大行其道,应用开始频繁的与存储打交道,需要频繁的访问数据库。但是面向对象编程和数据库存储两者怎么对应,怎么快速访问,快速编程就成了一个问题。

面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。

为了解决这个不匹配的现象,对象关系映射技术应运而生。

Ibatis的诞生背景

iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。最初侧重于密码软件的开发,现在是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO),同时还提供一个利用这个框架开发的JPetStore实例。

它解决了什么痛点、什么问题?

技术没有银弹,只有实事求是,解决问题。

讲解其解决痛点之前,我们先来看下其所工作的位置,一般位于Dao层,通过mybatis与jdbc打交道,然后对数据库进行读写操作。

不知道还有没有人记得没有ORM框架之前我们是如何跟数据库打交道的?

是的,JDBC API。

JDBC API流程大致如下

大家分析一下有什么痛点?

  1. 我们需要手动管理连接
  2. 我们需要关闭资源
  3. 我们需要映射参数
  4. 我们需要映射结果集
  5. 我们需要硬编码SQL

ORM框架让我们原先使用原生JDBC API与数据库打交道的方式变得更加简洁、易维护。

ORM框架就帮我们解决了这些问题。那么接下来我们来分析下Mybatis的优缺点

它有什么优缺点?

没有完美的技术、完美的框架、完美的实现。

优点

  1. 代码不再需要硬编码,我们可以放在XML里统一管理
  2. 动态SQL,灵活的组装SQL
  3. 结果集自动映射
  4. XML里可以编写原生SQL,可以对SQL进行优化

缺点

  1. 优点必然伴随缺点,编写针对性的编写原生SQL必然会带来难以迁移的问题。(不过现在很少说从某个数据库迁到某个数据库)
  2. 复杂的业务场景必然伴随着复杂的SQL拼接,这种基本是业务的通病,也不能全算是Mybatis自己的缺点。

有什么核心功能特性、亮点

这个技术有哪些核心的功能,亮点是什么?能给我们带来什么价值、收益?

ORM基础能力

面向Mybatis API编程,不再关注JDBC。

结果集映射

自动映射

<select id="selectUsers" resultType="User">
  select
    user_id             as "id",
    user_name           as "userName",
    hashed_password     as "hashedPassword"
  from some_table
  where id = #{id}
</select>

<select id="selectUsers" resultType="map">
  select id, username, hashedPassword
  from some_table
  where id = #{id}
</select>

手动映射ResultMap

<resultMap id="userResultMap" type="User">
  <id property="id" column="user_id" />
  <result property="username" column="user_name"/>
  <result property="password" column="hashed_password"/>
</resultMap>

<select id="selectUsers" resultMap="userResultMap">
  select user_id, user_name, hashed_password
  from some_table
  where id = #{id}
</select> 

动态SQL

XML方式

<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG WHERE state = ‘ACTIVE’
  <if test="title != null">
    AND title like #{title}
  </if>
  <if test="author != null and author.name != null">
    AND author_name like #{author.name}
  </if>
</select>

SQL对象构建器

private String selectPersonSql() {
  return new SQL() {{
    SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME");
    SELECT("P.LAST_NAME, P.CREATED_ON, P.UPDATED_ON");
    FROM("PERSON P");
    FROM("ACCOUNT A");
    INNER_JOIN("DEPARTMENT D on D.ID = P.DEPARTMENT_ID");
    INNER_JOIN("COMPANY C on D.COMPANY_ID = C.ID");
    WHERE("P.ID = A.ID");?
    WHERE("P.FIRST_NAME like ?");
    OR();
    WHERE("P.LAST_NAME like ?");
    GROUP_BY("P.ID");
    HAVING("P.LAST_NAME like ?");
    OR();
    HAVING("P.FIRST_NAME like ?");
    ORDER_BY("P.ID");
    ORDER_BY("P.FULL_NAME");
  }}.toString();
}

SQL统一管理

所有的SQL,存放在对应的XXXMapper.xml这样的配置文件中,统一管理。

核心功能实现原理、追其本质

芒格曾经说过,我们要学习重要学科的重要原理,像我们学习技术一样,我们要学习主要框架的核心实现原理,了解其本质,了解其解决的痛点,追其本质。

工作流程


本质是什么?

原来呢,我们是自己通过原生JDBC API跟数据库打交道,现在有了Mybatis,我们通过Mybatis跟数据库打交道,更方便了。但是呢,我们跟数据库打交道的底层没关系,因为我们只能通过相关协议,相关底层标准的API,即JDBC API、xxx数据库协议跟xxx数据库打交道。

这里思考一个问题:通过别人帮助我们打交道的方式,我们叫什么?

有人可能已经猜到了,是的,代理模式,Mybatis里用了大量的代理模式。那么我们来看看Mybatis的工作流程。


为何如此发展

分析发展路线图、分析核心版本,追根溯源。

Ibatis和Mybatis,不仅仅是名字的改变。

Ibatis在2010年前后就已经不再维护了,Ibatis团队投奔Google,Ibatis 3.x改名成了Mybatis。

Mybatis的功能更加强大,我们现在用的注解、插件扩展都是3.0之后才有的。

最后再来说明一下其本质,其本质就是代理,对JDBC的代理。 mybatis最初是对JDBC包了一层,通过代理帮助我们对JDBC API进行管理,再后来就对其易用性做了提升,比如注解方式的使用,插件扩展(PageHelper等插件)。

相关推荐

如何让老师看完文章后还啧啧称奇?满分作文有框架,这3点是关键

历年来语文考试中,作文的分数都占着相当大的一个比例,同时作文也是最容易拉开差距的一个模块。别人拿满分,而你却只有20分左右,分数的差距就是这样拉开的。作文想拿很高的分数却是不容易,但不是完全不可能的事...

小学作文写作技巧和方法,万能公式框架法。家长收藏

小学语文老师用心整理,将写作框架编成万能公式。作文的写作是语文学习中的重要一环,从小学到初中再到高中,作文一直是语文考试中占分比重最高的部分。小学阶段的语文写作相对来说比较简单,主要是打基础,但是很多...

如何用爆款改写技巧提升文章吸引力结构重塑:打破原文框架悬念前

如何用爆款改写技巧提升文章吸引力?结构重塑:打破原文框架悬念前置法-在开头设置悬念或提出反常识的结论,吸引读者注意力。例如,将“接纳不完美是治愈的开始”改写为“天天逼自己当完美超人?别杠了!生活本就...

守护袁昆:是否有必要按框架去写文章,拍摄剪辑视频?

(文/守护袁昆)如今不管是写文章还是剪辑视频,越来越多的朋友喜欢用框架、用脚本,作为互联网创作者,我们是否有必要按框架去写文章,拍摄剪辑短视频呢?其实在内容创作过程中,是否使用框架始终是一个充满争议的...

揭秘!爆款文章的秘密:让读者无法抗拒的文章框架

说说我自己一开始写文章都会犯一个毛病,文章,通常是想到哪里,写到哪里,“管不住字儿”。这样往往会出现以下问题绊住我们继续写下去1、很容易,写着就跑偏了,最终出来的成品和最初的设想偏离很大2、会写得很慢...

想要写出逻辑清晰的文章,你需要掌握哪些写作结构

想要写出好文章,就必须要了解文章的结构和框架。一篇文章结构清晰,读者就很容易跟上作者的思路,看出文章的重点内容。如果你对新媒体的文章有进行过研究,你就会发现很多公众号的文章结构都是类似的。所以你需要掌...

写作结构拆解:从选题到框架,如何让文章说服力翻倍?

你有没有想过,为什么有些文章能轻松获得很高的阅读量,而你的文章却始终无人问津?其实,写出爆款文章并没有想象中那么难。关键在于选择一个吸引人的主题,并用一个清晰的写作框架,通过2-3个有力的子观点支撑...

申论怎么写?结构怎么弄?这篇文章是最基本的好文章框架

写作总被吐槽逻辑混乱?三步搭建框架法,新手也能写出漂亮文章

一、结构决定论:信息传递的桥梁写作者和读者之间始终存在一道隐形的鸿沟。作者脑海中的想法如同一棵枝繁叶茂的大树,但直接倾倒给读者时,往往只剩下零散的枝叶,信息在传达过程中的丢失,作者输出的和读者读到的不...

如何搭建文章框架:新手写作者很有必要看

#头条深一度-深度阅读计划#见面好呀,我是潼臻~37岁,边上班边带娃的二胎妈妈藏起生活里的琐碎,期望你我都能遇到更好的自己~~~~~~~~~~~~~~~~~~果然多读书是可以真切学习到有用的东西最近把...

模型上下文协议(MCP)的可视化向导

最近,模型上下文协议(MCP)引起了广泛关注。你一定听说过它。今天,让我们来了解一下它是什么。直观地说,MCP就像是AI应用的USB-C接口。正如USB-C提供了一种标准化的方式,用于将...

97个人放一页PPT!用对Smartart架构图直接开挂!

从讯飞出差回来的路上,在高铁上看到一条微博,关于红楼梦人物的思维导图:下面很多家长说,帮助很大,能帮助上学的孩子梳理清人物关系,我看了下,清楚是清楚,但真的不太好看!作为一名PPT博主,我就顺带在高...

技术架构规范与实践(二)架构设计示例

1.逻辑架构1.1领域概念1.2宏观应用架构1.3宏观流程1.4微服务拆分与分层2.技术架构3.开发架构3.1后端技术栈分类名称版本描述后端框架/组件JavaJdk8(openjdk:8u342)后...

倾斜柱模板安装加固

1、适用范围:呈梯形逐层向内侧倾斜的框架柱。2、工艺流程:定位放线-配模-校正梁位置-安装加固。3、工艺方法:(1)定位放线首先现场技术管理人员对每颗不同标高的梁底、梁中边线及200mm控制线进行平面...

地基与基础工程、主体工程节点构造

#去班味吧#桩头凿除环切法工艺说明:1、根据桩头预留长度(深入承台10cm)放样桩顶标高,施工人员根据测量结果在基桩上用红油漆标注环切线;2、在切割线以上部分桩底,人工用钢钎打入桩底约15cm,打入时...

取消回复欢迎 发表评论: