全国免费咨询:

13245491521

VR图标白色 VR图标黑色
X

中高端软件定制开发服务商

与我们取得联系

13245491521     13245491521

2024-01-04_七张图解锁Mybatis整体脉络,让你轻松拿捏面试官

您的位置:首页 >> 新闻 >> 行业资讯

七张图解锁Mybatis整体脉络,让你轻松拿捏面试官 本系列文章皆在从细节着手,由浅入深的分析Mybatis框架内部的处理逻辑,带你从一个全新的角度来认识Mybatis的工作原理。 思考,输出,沉淀。用通俗的语言陈述技术,让自己和他人都有所收获。 作者:毅航?? 在过去的一个月中,我们以使用MyBaits时最简单的四行代码开始, 由浅入深的分析MyBatis执行sql的秘密,感兴趣的可翻阅专栏 Mybatis源码分析中的相关文章进行查看。 MyBatis入门的四行代码 //加载配置文件 InputStreamis=Resources.getResourceAsStream("mybatis.xml"); //创建sessionFactory对象 sessionFactory=newSqlSessionFactoryBuilder().build(is); //获取sqlSession对象信息 SqlSessionsession=factoy.openSqlSession() //构建映射器的代理对象 UserMappermapper=session.getMapper(UserMapper.class); //.....调用相关方法信息 在此之前,笔者对于Mybatis分析的文章的主要从小处着手,对MyBatis内部实现细节进行了细致的分析。而本文笔者计划从全局角度来对Mybatis的整体架构及进行一次回顾和总结,希望能帮助你更加透彻的理解Mybatis。 前言 MyBatis是一款ORM(Object-Relational Mapping)框架,其主要用于将Java对象与关系数据库之间进行映射,凭借其轻量性、稳定性以及广泛的开源社区其受到了广大开发者的追捧。 那MyBatis为我们做了哪些事情呢?其实,总结来看主要有如下几点: SQL映射配置:MyBatis使用XML或注解配置文件来定义SQL查询、插入、更新和删除操作,以及与数据库表之间的映射关系。这使得开发者能够将SQL语句与Java代码分离,提高了代码的可维护性。动态SQL:MyBatis支持动态SQL,允许根据不同的条件生成不同的SQL语句。这使得构建复杂的查询变得更加灵活和方便。参数映射:MyBatis能够将Java对象的属性与SQL语句中的参数进行映射,无需手动编写繁琐的参数传递代码。结果集映射:MyBatis支持将SQL查询结果映射到Java对象,自动将数据库表中的列值赋给Java对象的属性,大大简化了数据的读取和处理。事务管理:MyBatis可以与Java的事务管理框架(如Spring)无缝集成,确保数据库操作的原子性和一致性。连接池集成:MyBatis可以与常见的Java连接池库(如Apache DBCP、C3P0、HikariCP)集成,以管理数据库连接的获取和释放。二级缓存:MyBatis支持二级缓存,可以在多个会话之间共享数据,提高性能。知晓了MyBatis的功能特性后,接下来让我们一起来看看MyBatis内部是通过哪些组件来支撑起这些功能的。 总览MyBatis 对于Mybatis的架构大致可以分为三层:基础支持层、核心处理层和接口层。 或许,你会觉得上图过于复杂,难以理解。如果此刻你也有这样的疑惑,不要慌。不妨跟着笔者思路来进行梳理。 首先,使用MyBatis概括来看大致包括如下几步: 定义接口,配置相关的xml文件信息加载接口的配置文件,解析相关配置文件生成接口代理类,执行相关sql由于在使用MyBatis过程中会编写相关的配置文件,所以Mybatis内部必然需要相应组件来支撑配置文件的解析,这些也就构成了底层的基础支撑层。既然会解析配置文件,那是不是必然会涉及到资源加载、配置解析等模块? 进一步,当配置文件解析完成后,下一步就是生成代理,然后执行sql,此时所涉及的也就是核心处理层中的sql执行,sql解析等。更进一步,执行sql过程中为了避免Connection频繁创建,是不是需要对连接进行池化操作?所以MyBatis内部会抽象出一个数据源模块来统一管理连接。 除此之外,对于sql执行过程中的事务是不是也需要控制?所以MyBatis还有事务管理模块来对sql执行过程中的事务进行管理。 事实上,你只需要记住Mybatis的使用过程为:定义接口,提供配置文件,而后生成代理,执行Sql 即可。以此进行发散,自然而然能扩展出上图所示内容,根本没必要死记硬背。 熟悉了MyBatis的整体架构后,我们接下来看Mybatis内部执行sql的大致流程: image.png接下来,我们将主要围绕这张图中内容进行总结分析。 配置文件解析 配置文件解析过程大致如下所示: image.png事实上,MyBatis内部对于配置文件解析的过程可以概括如下: 加载配置文件:MyBatis首先加载主配置文件(通常是mybatis-config.xml),并创建一个Configuration对象来表示整个MyBatis配置。解析主配置文件:MyBatis使用XML解析器解析主配置文件,该文件包含了关于数据源、插件、类型别名、缓存等全局配置信息。这些配置会被存储在Configuration对象中。而参与配置文件解析的都继承与BaseBuilder,其体系结构如下所示: 其中 XMLStatementBuilder:这个类用于解析映射文件中的 select、insert、update 和 delete 等标签,构建与 SQL 语句相关的对象(如 MappedStatement),包括 SQL 语句的解析、参数映射、结果映射等。XMLMapperBuilder:XMLMapperBuilder 用于解析映射文件(通常是 Mapper.xml文件),负责构建与映射文件相关的对象,包括映射文件的解析、SQL 语句的构建、参数映射、结果映射、缓存配置等。XMLConfigBuilder:XMLConfigBuilder 用于解析主配置文件(通常是 mybatis-config.xml 文件),负责构建与全局配置相关的对象,包括数据源配置、类型别名配置、插件配置、缓存配置等。总结来看,对于MyBatis的加载过程来说,其在处理配置文件信息时,首先,会传递配置文件所在位置信息,然后再调用框架提供的SqlSessionFactory的build方法便会根据传入路径信息去加载相关的配置文件,并进行解析。而解析的内容会存放到的configuration之中,进而方便后续组件的使用。 代理构建 当配置文件解析,下一步就是通过SqlSession的getMapper方法来构建一个接口对应的代理类,这一过程大致如下: image.png这一过程中涉及的组件主要包括MapperProxyFactory、MapperRegistry、MapperProxy,更加详细的分析可参考Mybatis流程分析(六): Mybatis中方法和sql语句的桥梁——MapperProxy, 总之这一过程的本质就是通过Jdk动态代理的方式返回一个实现接口的实例对象 sql执行 当配置文件解析完成,接口相应的代理类构建完毕后,下一步要做的就是sql的执行,这一过程逻辑大致如下所示: 这一部分的底层逻辑就是原生JDBC操纵数据库的那一套逻辑,即 创建SQL语句:即创建Statement、PreparedStatement或CallableStatement对象,分别用于执行不同类型的SQL语句。执行SQL查询:使用创建的Statement或PreparedStatement对象来执行SQL查询。处理查询结果:通过ResultSet对象来处理查询的结果数据。总结 最后,我们再来一下Mybatis内部对于sql执行的大致步骤: 创建 SqlSessionFactory:使用Mybatis首先需要创建一个 SqlSessionFactory 对象,这通常通过读取MyBatis的主配置文件(mybatis-config.xml)并使用 SqlSessionFactoryBuilder 来实现。SqlSessionFactory 负责创建数据库连接和 SqlSession对象。 创建 SqlSession:通过 SqlSessionFactory 创建一个 SqlSession 对象。SqlSession 代表了与数据库的一次会话,它可以执行 SQL 操作并管理数据库连接。通常,每个线程都会创建自己的 SqlSession。 执行 SQL 语句:在 SqlSession 中,通过调用方法执行SQL 语句。MyBatis支持多种方式来执行 SQL,包括 selectOne()、selectList()、insert()、update()、delete() 等方法。 SQL 语句解析:MyBatis会解析 SQL 语句,包括动态 SQL,参数映射和结果映射。这包括了将 Java对象转化为SQL 语句中的参数,以及将查询结果映射回Java对象。 执行 SQL:MyBatis将 SQL语句发送到数据库,并执行相应的操作,如查询、插入、更新或删除。数据库返回结果或受影响的行数,这取决于SQL语句的类型。 处理结果:MyBatis 最终会将SQL的执行结果映射为 Java对象,然后返回给调用者。映射过程通常基于映射文件中的配置。结果集的处理包括将数据库查询结果映射为 Java对象的属性值。 进一步,上述步骤可总结概括总结为如下的流程。 cd8e30061c88220f6ae927eba6540fb.png(注:上图源自博客:https://blog.csdn.net/luanlouis?type=blog ) (ps:如果觉得文章不错的话,不妨点赞收藏方便日后复习,或者加个关注不错过每一次更新??) 阅读原文

上一篇:2025-03-16_全美高校遭史上最大规模裁员。。。。 下一篇:2025-01-31_OpenAI洽谈巨额融资,估值有望达3000亿,部分用于「星际之门」

TAG标签:

16
网站开发网络凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设网站改版域名注册主机空间手机网站建设网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线:13245491521 13245491521 ,我们会详细为你一一解答你心中的疑难。
项目经理在线

相关阅读 更多>>

猜您喜欢更多>>

我们已经准备好了,你呢?
2022我们与您携手共赢,为您的企业营销保驾护航!

不达标就退款

高性价比建站

免费网站代备案

1对1原创设计服务

7×24小时售后支持

 

全国免费咨询:

13245491521

业务咨询:13245491521 / 13245491521

节假值班:13245491521()

联系地址:

Copyright © 2019-2025      ICP备案:沪ICP备19027192号-6 法律顾问:律师XXX支持

在线
客服

技术在线服务时间:9:00-20:00

在网站开发,您对接的直接是技术员,而非客服传话!

电话
咨询

13245491521
7*24小时客服热线

13245491521
项目经理手机

微信
咨询

加微信获取报价