Mybatis框架结构
创始人
2025-05-29 02:32:15

在学习mybatis之前,首先回忆传统jdbc如何访问数据库。传统jdbc 访问数据库首先需要导入驱动jar包,然后在后端的持久层进行访问数据库,具体步骤为:

  1. 注册驱动。根据不同的数据库注册不同的驱动,例如mysql、oracle等

  1. 获取数据库连接。获取连接是利用DriverManage生成Connection类型连接。在此处需要填写数据库的账号密码和地址。

  1. 定义Sql语句。例如在此处编写好字符串类型的增删改查Sql语句。

  1. 获取执行Sql对象。执行sql语句的是Statement对象,而获取Statement对象是通过第二步的Connection获取。Mybatis其本质也是通过Statement操作数据库。但是Mybatis与传统jdbc不同,不同在于不需要重复的申请数据库连接。

  1. 执行sql语句。执行sql语句是利用Statement对象执行,Statement对象有executeQuery、executeUpdate 和execute。executeQuery执行数据库查询,executeUpdate 执行数据库增删改。Mybatis底层依旧使用的是这些方式操作数据库。

  1. 接受返回集,处理数据,关闭连接。

不同于传统jdbc,Mybatis是将传统jdbc进行封装,例如传统jdbc第1、2步,只需要配置xml文件即可,同时编程人员操作数据库时不同频繁的操作java类,使编程人员从底层重复代码中脱离出来,更多的关注程序的逻辑实现。对于Mybatis,它更多采用了配置xml文件的形式操作数据库和配置自己。与传统jdbc执行步骤相比,Mybatis具体的执行流程如图1。

图1 Mybatis执行流程

  1. 在MyBatis启动的时候,主要任务是解析配置文件。配置文件来源于全局配置文件(Mybatis-config.xml)、映射器配置文件(Mapper.xml),Mapper.xml包含如何控制MyBatis的行为和Sql语句,以及入参类型,返回值映射。解析配置文件后,程序会把这些信息解析成一个Configuration对象,由Configuration统一管理配置信息。

  1. 在程序调用数据库操作的时候,Mybaits它在应用程序和数据库之间建立连接,就是创建了SqlSession对象。SqlSession对象由会话工厂SqlSessionFactory创建,SqlSessionFactory包含所有的配置信息,在容器初始化的时候由SqlSessionFactoryBuilder创建。此处可以类比传统jdbc中的Connection,只是获取了数据库连接,但是并未向数据库发出具体的执行语句指令。

  1. 在执行数据库操作的时候,SqlSession将具体操作委托于Executor对象,由Executor执行操作。在此处Executor会解析Sql语句,Executor对象利用StatementHander操作动态Sql,将参数等与动态Sql结合,生成可执行的Sql语句。同时也将在这里完成结果集映射,将数据库中的字段与java类一一对应。此处对应传统jdbc操作的c、d、e步骤。

从上文的步骤可以发现,在实际的开发中,我们只需要关注配置文件和编写少量的Sql语句即可以完成操作数据库。并且在返回值类型中,以封装对象的形式存在,方便了我们的日常开发。从Mybatis执行流程也可以发现,整个Mybatis的执行流程从SqlSession开始,到StatementHande结束,与程序员接触的只是SqlSession接口。SqlSession是每个mapper.xml文件共有的数据会话接口,也即即使有很多mapper.xml文件,而SqlSession只有一个。也区别与传统的jdbc,每一次访问数据库都需要创建新的数据库连接,而造成的资源浪费。

依靠Mybatis 的执行流程,Mybatis 框架结构可以总结为如图2所示。

图2 Mybatis框架结构

Mybatis 框架结构大体与执行流程相类似。 Mybatis有众多优点,其中最重要的是节约资源,原生jdbc除了代码大量复写的缺点,最大的缺点是与数据库连接的重复申请,造成了数据库资源的浪费。在节省资源方面,Mybatis采用了数据库连接池,数据库连接池是负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个,这项配置在Mybatis中也有明显的体现。另外,Mybatis也采用了缓存机制,将频繁访问的数据存放到缓存中,避免了重复访问数据库。

Mybatis 是操作数据库的框架,数据的安全是很重要的。Mybatis 提供了数据库防注入的措施。数据库注入是常见的数据库安全问题,原因是在sql语句预编译阶段插入了其他sql语句,导致数据库执行了错误指令。在Mybatis 里,通过底层实现预编译而避免发生数据注入,具体用法是#和$的区别。#在底层通过prepareStatement预编译实现类对当前传入的sql进行了预编译,避免错误指令产生。而$首先进行字符串拼接,再进行编译,如此就容易产生数据注入。

相关内容

热门资讯

python:DIY字符画的程... 目录开发环境要求运行方法具体的操作步骤如下:代码示例源码及运行程序下载地址 开发环境要...
特朗普被判后,上诉!他还觉得冤... 三名法官中,除了一名是奥巴马时期由民主党政府任命以外,另两位法官都是共和党政府时期任命。而就这样的搭...
增程已老、纯电难料,理想的现实... 理想汽车于北京时间 5 月 29 日晚间港股盘后、美股盘前发布了 2024 年第一季度财报。一句话,...
Launching nodes... 文章目录背景介绍运行一个启动文件(可选)控制Turtlesim节点 参考...
金融测试项目 最近测试项目很多很忙,已经多到了996的地步,但我依然认为阶段性的整理永...
特朗普2019年来首次约见鲍威... 周四,美联储在一份声明中表示,美联储主席鲍威尔5月29日周四应美国总统特朗普的邀请,在白宫与其会面。...
DOGE效应显现?华盛顿等“深... 特朗普政策给美国劳动力市场带来不确信行,上周美国失业救济续领人数大幅增加。美国劳工部周四发布的最新数...
贷款利率太高惹的祸!美国4月成... 周四,根据美国房地产经纪人协会(NAR)的数据,美国4月成屋签约销售指数环比大跌6.3%,为自202...
巨子生物胶原蛋白“缺量罗生门”... 重组胶原蛋白龙头企业巨子生物(2367.HK)正卷入成分添加“缺斤短两”的争议中。5月24日,美妆行...
黄金投资崩塌!大案,涉数亿资金... 5月15日,林明像往常一样,熟练地打开永坤黄金的线上平台,点击“黄金提现”按钮。按以往三年的操作,资...
CentOS jdk-8u36... 系统自带JDK卸载: java路径查询: whereis java查找 ...
马斯克“副将”据称届满离任政府... 财联社5月30日讯(编辑 赵昊)综合多家媒体报道,知情人士透露,曾经是埃隆·马斯克“政府效率部”中实...
一度涨超6%,市值重回全球第一... 科技股“遇冷”之际,英伟达这份财报来得可谓及时。当地时间5月28日,英伟达披露了2026财年一季度财...
特朗普与哈佛的冲突:3亿美国人... 特朗普与哈佛的冲突反映了当下美国社会意识形态的严重分裂。哈佛作为美国顶尖学府,代表着传统的精英教育和...
宇树科技回应更名:是公司运营方... 【宇树科技回应更名:是公司运营方面的常规变更】29日,宇树科技向合作伙伴表示,因公司发展需要,杭州宇...
前端资源共享方案对比-笔记:i... 前端页面资源如何分享,常见的有iframe,其次是js-sdk。这两类的在地图类工具经...
PTA:L1-040 最佳情侣... L1-040 最佳情侣身高差 问题描述:         专家通过多组情侣研究数据发现...
LeetCode 热题 HOT... 介绍 对于算法题,按题型类别刷题才会更有成效,因此我这里在网上搜索并参考...
会过日子的人都在用,超八成人能... “618”进程过半。近日,新浪金融研究院的一份《分期消费习惯调研》显示,“能赚会算”、“能花会省”的...
股市必读:奥特维(688516... 截至2025年5月29日收盘,奥特维(688516)报收于33.41元,上涨2.14%,换手率0.9...
丧钟已敲响,新能源汽车金融泡沫... 某宇宙第一大车企是谁?大家心里都有数,名字我就不说了。 这家车企, 2020年负债1366亿,到 2...
指针进阶(上) 内容小复习🐱: 字符指针:存放字符的数组 char arr1[10];...
基于OpenCv的传统视觉应用... 图像生成 OpenCv是计算机视觉中经典的专用库,具备支持多语言、跨平台的优点...
经纬早班车|美国一季度经济环比...   【隔夜重磅】  美股收高,英伟达涨逾3%  美东时间周四,美股三大指数集体收涨。道指比前一交易日...
深入剖析Linux——进程信号 致前行的人:                 要努力,但不着急ÿ...
未来超额收益仍在于规模化扩张的...   当前,地缘博弈加剧、技术封锁频现,全球宏观环境正经历深度重构,而AI(人工智能)引发的“算力革命...
玄戒芯片亮相,雷军离超越乔布斯... 近日,小米玄戒O1芯片引发全球科技界关注。雷军在接受央视《面对面》节目专访中曾提到:他创业的源头是在...
【CSS 知识总结】第二篇 -... 一,前言 上一篇,简单介绍了 html 标签和使用语义化的好处ÿ...
学习28个案例总结 学习前         对于之前遇到的问题没有及时总结,导致做什么事情都是新的一样。没...
美股震荡收高,美上诉法院恢复特... *英伟达财报提振科技股*美国上诉法院恢复实施特朗普政府关税政策*美国一季度经济环比萎缩0.2%当地时...