一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于简述mybatis的工作原理 mybatis的工作原理和操作步骤的文章,本文对文章简述mybatis的工作原理 mybatis的工作原理和操作步骤好好的分析和解答,希望你能喜欢,只有你喜欢的内容存在,只有你来光临,我们才能继续前行。
MyBatis 的工作原理:读取 MyBatis 配置文件、加载映射文件、构造会话工厂、创建会话对象、Executor 执行器、输入参数映射、输出结果映射。
1、读取 MyBatis 配置文件:
mybatis-config.xml 为 MyBatis 的全局配置文件,配置了 MyBatis 的运行环境等信息,例如数据库连接信息。
2、加载映射文件:
映射文件即 SQL 映射文件,该文件中配置了操作数据库的 SQL 语句,需要在 MyBatis 配置文件 mybatis-config.xml 中加载。mybatis-config.xml 文件可以加载多个映射文件,每个文件对应数据库中的一张表。
3、构造会话工厂:
通过 MyBatis 的环境等配置信息构建会话工厂 SqlSessionFactory。
4、创建会话对象:
由会话工厂创建 SqlSession 对象,该对象中包含了执行 SQL 语句的所有方法。
5、Executor 执行器:
MyBatis 底层定义了一个 Executor 接口来操作数据库,它将根据 SqlSession 传递的参数动态地生成需要执行的 SQL 语句,同时负责查询缓存的维护。
6、MappedStatement 对象:
在 Executor 接口的执行方法中有一个 MappedStatement 类型的参数,该参数是对映射信息的封装,用于存储要映射的 SQL 语句的 id、参数等信息。
7、输入参数映射:
输入参数类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类型。输入参数映射过程类似于 JDBC 对 preparedStatement 对象设置参数的过程。
8、输出结果映射:
输出结果类型可以是 Map、 List 等集合类型,也可以是基本数据类型和 POJO 类型。输出结果映射过程类似于 JDBC 对结果集的解析过程。
1、API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵、数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
2、数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
3、基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。
假如我们要自己设计一个半自动的仿 Mybatis 框架,有哪些环节是必不可少的呢?思考再三,必然有以下环节:
如果仅考虑这三点的话,其实实现一个简单的 ORM 框架就很容易了,再附加一些反射和正则表达式等等就可以搞定了.
那如果去参考 Mybatis,我们来看看它的几个环节是如何设计的:
其实大致思路一样,需要一个数据结构去存储全部的变量,通过接口代理的方式调用 Sqlsession 里面内置的方法,`` 不同的是真正的执行者又加了一层,是 Executor ``,再通过原始 JDBC 返回数据给调用者,当然, 真正的 Mybatis 包含了众多的设计模式以及数据源,缓存,动态 SQL,数据库事务,延迟加载处理 等等
>
这里有个小点需要强调下,真正的执行者是`` Executor ``,我们每次在使用以下代码:
通过查看源码也可以看到,SqlSession 接口的默认实现类是`` DefaultSqlSession ``
而方法真正的执行,如 selectList 方法:
>
#{} 是预编译处理,${}是字符串替换。Mybatis 在处理 #{}时,会将 sql 中的 #{}替换为?号,调用 PreparedStatement 的
set 方法来赋值;
Mybatis 在处理时,就是把时,就是把{}替换成变量的值。
使用 #{}可以有效的防止 SQL 注入,提高系统安全性
PS:mybatis 执行的本质还是 SQL,因此回归本质可以简单理解为一个对于 PreparedStatement ,一个对应 Statement
Dao 接口即 Mapper 接口,接口的全限名,就是映射文件中的 namespace 的值;接口的方法名,就是映射文件中 Mapper 的 Statement 的 id 值;接口方法内的参数,就是传递给 sql 的参数
`` 实现原理: ` Mapper接口的工作原理是JDK动态代理,mybatis会对每一个mapper代理生成一个mapperProxy对象,代理对象会拦截接口方法,转而自动对应到sqlsession上,最终由 ` Executor ``执行
`` 参数不同,方法不可重载 ``,为什么?
上文说到 mybatis 有一个环节是解析 XML 文件或者解析接口,它会去构建一个叫做 MapperStatement 对象去存储 mapper 的相关信息,每一个 dao 接口方法在执行的时候到底是如何定位找到对应的 MapperStatement 的呢?
源码逻辑图:
以上内容是小编精心整理的关于简述mybatis的工作原理 mybatis的工作原理和操作步骤的精彩内容,好的文章需要你的分享,喜欢简述mybatis的工作原理 mybatis的工作原理和操作步骤这篇精彩文章的,请您经常光顾吧!
上一篇:博物馆工作人员是否属于公务员 博物馆工作一般工资多少
下一篇:更多农历
本文标题:简述mybatis的工作原理 mybatis的工作原理和操作步骤
本文链接:http://m.xzfx123.com/article/118793.html
一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于简述mybatis的工作原理 mybati...
一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于博物馆工作人员是否属于公务员...
一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于6月去尼泊尔旅游合不合适 去尼...
一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于十二星座前5名学霸 6月29日生...
一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于如何在家附近找工作带小孩 想...
一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于6月27出生的明星有哪些 出生于...
一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于普吉岛6月下雨多吗 普吉岛6月...
一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于文化工作总结 2023年文化工作...
一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于社会工作综合能力中级 社会工...
一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于药剂科药库个人工作总结 2023...