Mybatis 1.原理流程图
仅用来做个人笔记记录。
总流程:
- 根据配置文件(全局配置文件和sql映射文件)初始化configuration对象。
- 创建一个defaultSqlSession对象,包含Configuration及Executor(根据全局配置文件中defaultExecutorType创建对应的Executor)
DefaultSqlSession.getMapper拿到Mapper接口对应的MapperProxy
MapperProxy里有DefaultSqlSession
- 执行增删改查
1、调用DefaultSqlSession增删改查
2、创建StatementHandler
(同时创建ParameterHandler,ResultSetHandler)
3、调用StatementHandler预编译参数以及设置参数值
使用ParameterHandler给sql设置参数
4、调用StatementHandler增删改查
5、ResultSetHandler封装结果

mybatis 四大对象:
executor、parameterHandler、ResultSetHandler、StatementHandler


步骤详解:
- 获取SqlSession:
解析文件的信息保存到Configuration中,返回Configuraation的DefaultSqlSession对象;【mappedStatement】代表一个增删改查的详细信息
无论是我们自定义的还是第三方预先定义的,只要是我们使用的每条sql语句都会生成一个mappedStatements

获取SqlSession

- 获取接口代理对象MapperProxy

- 执行增删改查

从ms(mappedStatements)中获取Configuration。StatementHandler 与编译参数以及设置参数值。简单说就是生成要执行的sql语句。
设置参数,执行sql语句。
execute点进去后执行的方法。把替代的参数打印出来。根据方式,执行jdbc的增删改查(设计到数据库连接池)。
再往后对查询到的结果进行映射 resultSetHandler.handleCursorResultSets(ps)。
Mybatis 1.原理流程图的更多相关文章
- Mybatis 缓存原理
Mybatis 缓存原理 本文来自拉钩 java 高薪训练营,如果文章写的不好,看不懂可以找我要课程视频,不收费. 只愿在编程道路上,寻求志同道合的码友.v:15774135883 1 Mybatis ...
- [Spark内核] 第40课:CacheManager彻底解密:CacheManager运行原理流程图和源码详解
本课主题 CacheManager 运行原理图 CacheManager 源码解析 CacheManager 运行原理图 [下图是CacheManager的运行原理图] 首先 RDD 是通过 iter ...
- MyBatis工作原理
Mybatis工作原理: 我们的应用程序通过mybatis提供的api,增删改查方法来访问数据库,api底层调用了jdbc ,只不过mybatis对jdbc的封装是不完全封装,里面的sql语句需要我们 ...
- Mybatis插件原理分析(二)
在上一篇中Mybatis插件原理分析(一)中我们主要介绍了一下Mybatis插件相关的几个类的源码,并对源码进行了一些解释,接下来我们通过一个简单的插件实现来对Mybatis插件的运行流程进行分析. ...
- Mybatis的原理与JVM内存结构(面试题)
Mybatis的原理 1.Mapper 接口在初始SQL SessionFactory注册的 2.Mapper 接口注册在名为MapperRegistry类的 HasMap中 key=Mapper c ...
- 面试官:你分析过mybatis工作原理吗?
Mybatis工作原理也是面试的一大考点,必须要对其非常清晰,这样才能怼回去.本文建立在Spring+SpringMVC+Mybatis整合的项目之上. 我将其工作原理分为六个部分: 读取核心配置文件 ...
- mybatis运行原理
mybatis运行原理 运行过程中涉及到的类或者接口 Resources(c) :用于加载mybatis核心配置文件 XMLConfigBuilder(c) :用于解析xml文件(核心配置文件) Co ...
- mybatis 插件原理
[传送门]:mybatis 插件原理
- 【转】MaBatis学习---源码分析MyBatis缓存原理
[原文]https://www.toutiao.com/i6594029178964673027/ 源码分析MyBatis缓存原理 1.简介 在 Web 应用中,缓存是必不可少的组件.通常我们都会用 ...
随机推荐
- C# DataGridView 更改类型 重绘
DataGridView 更改类型 需要用到重绘 DataGridViewTextBoxColumn aa01 = new DataGridViewTextBoxColumn(); aa00.Da ...
- 修改 Linux 服务器时间
1.当前时间 [app@127-0-0-1 shine]$ date Wed Oct 23 11:44:30 CST 2019 2.修改时间 [app@127-0-0-1 shine]$ date - ...
- c# 使用Split分割 换行符
c# 使用Split分割 换行符,方法如下(其余方法有空再添加): string str = "aa" + "\r\n" + "bb"; s ...
- python实战,
1.把日志状态码为200得请求记录下来 记录信息(ip,访问时间,请求资源) 封装函数再次调用,健壮性try except #coding=utf-8import redef aclog(path, ...
- Alpha发布--美工+文案
此作业对应要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8677 一.美工: 1.产品logo 2.原型页面展示 2.1 进入萌 ...
- 关于varchar的总结
摘自:https://www.jianshu.com/p/c3e188440c67 大家都知道用 varchar 比用 char 类型更省空间(不过性能略有下降,char查询更快),相对于定长的 ch ...
- PHP 封装类来访问数据库
封装访问数据库的类 <?php class DBDA { public $host = "localhost"; //数据库地址 public $uid = "ro ...
- [常用的SQL语句总结]
1. 创建数据库DataBase create database 数据库名称; 2. 删除数据库DataBase drop database 数据库名称 drop database 数据库名称1, ...
- leetcode 56区间合并
class Solution { public: static bool cmp(vector<int> a,vector<int> b){ ]<b[]; } vecto ...
- python安装的各种问题
在windows上安装python下载mis安装即可. 环境用elipse即可,需要下载pydev插件,配置解释器. 如需用到matplotlib,安装顺序为matplot,numpy,dateuti ...