苏州园区网站建设,安康市城市建设开发总公司网站,html5网站建设平台,西安模板网站前言
MyBatis是一款ORM#xff08;Object-Relational Mapping#xff09;框架#xff0c;其主要用于将Java对象与关系数据库之间进行映射#xff0c;凭借其轻量性、稳定性以及广泛的开源社区其受到了广大开发者的追捧。
那MyBatis为我们做了哪些事情呢#xff1f;其实Object-Relational Mapping框架其主要用于将Java对象与关系数据库之间进行映射凭借其轻量性、稳定性以及广泛的开源社区其受到了广大开发者的追捧。
那MyBatis为我们做了哪些事情呢其实总结来看主要有如下几点
SQL映射配置MyBatis使用XML或注解配置文件来定义SQL查询、插入、更新和删除操作以及与数据库表之间的映射关系。这使得开发者能够将SQL语句与Java代码分离提高了代码的可维护性。动态SQLMyBatis支持动态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的大致流程 接下来我们将主要围绕这张图中内容进行总结分析。
配置文件解析
配置文件解析过程大致如下所示 事实上MyBatis内部对于配置文件解析的过程可以概括如下
加载配置文件MyBatis首先加载主配置文件通常是mybatis-config.xml并创建一个Configuration对象来表示整个MyBatis配置。解析主配置文件MyBatis使用XML解析器解析主配置文件该文件包含了关于数据源、插件、类型别名、缓存等全局配置信息。这些配置会被存储在Configuration对象中。
而参与配置文件解析的都继承与BaseBuilder其体系结构如下所示 其中
XMLStatementBuilder这个类用于解析映射文件中的 select、insert、update 和 delete 等标签构建与 SQL 语句相关的对象如 MappedStatement包括 SQL 语句的解析、参数映射、结果映射等。XMLMapperBuilderXMLMapperBuilder 用于解析映射文件通常是 Mapper.xml 文件负责构建与映射文件相关的对象包括映射文件的解析、SQL 语句的构建、参数映射、结果映射、缓存配置等。XMLConfigBuilderXMLConfigBuilder 用于解析主配置文件通常是 mybatis-config.xml 文件负责构建与全局配置相关的对象包括数据源配置、类型别名配置、插件配置、缓存配置等。
总结来看对于MyBatis的加载过程来说其在处理配置文件信息时首先会传递配置文件所在位置信息然后再调用框架提供的SqlSessionFactory的build方法便会根据传入路径信息去加载相关的配置文件并进行解析。而解析的内容会存放到的configuration之中进而方便后续组件的使用。
代理构建
当配置文件解析下一步就是通过SqlSession的getMapper方法来构建一个接口对应的代理类这一过程大致如下 这一过程中涉及的组件主要包括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对象。执行 SQLMyBatis 将 SQL 语句发送到数据库并执行相应的操作如查询、插入、更新或删除。数据库返回结果或受影响的行数这取决于SQL语句的类型。处理结果MyBatis 最终会将SQL的执行结果映射为 Java 对象然后返回给调用者。映射过程通常基于映射文件中的配置。结果集的处理包括将数据库查询结果映射为 Java 对象的属性值。
进一步上述步骤可总结概括总结为如下的流程。