Mybatis的原理相关
今天看了一篇有关Mybatis非常好的文章,顺便写了一下学习心得。
原文地址:https://blog.csdn.net/u010349169/article/details/40422941
一。Mybatis的框架设计
Mybatis框架大致可以分为四个部分:
(1)接口层:用于实现和数据库的交互 ---- 可以通过两种方式来调用:Mapper接口绑定 或 Mapper.xml配置(基于StatementID,即<mapper标签中的>namespace值 + sql标签中的id值)
(2)数据处理层:Mybatis的核心 主要
a.动态SQL的创建 --- 一个语句(一个<select>/<delete>等标签对对应一个Statement对象)
b.SQL语句执行
c.封装查询结果集为List<E>
(3)框架支持层:a.事务管理机制 --- 如JDBC原生事务管理的commit(),rollback(),close() --- 用SqlSession对象执行
b.数据库连接池管理机制 --- 如<dataSource>标签中的type='POOLED'即为使用数据库连接池 --- 多个数据库连接对象(即Connection对象),已被占用的状态为(active),未被占用的为(idle)
c.缓存机制 --- 为减小服务器和数据库的压力和提升效率 --- 如SqlSession(一级缓存)、SqlSessionFactory(二级缓存) ---- 每一个Statement对象有一个自己对应的缓存
d.SQL语句的配置 --- Mapper.xml文件配置 和 注解配置(通过注解传入参数 @param Object obj)
(4)引导层:引导层是配置和启动Mybatis配置信息的方式。我使用的是mybatis.xml配置方式
二。Mybatis的一些核心组件
该图来源于原博客:https://blog.csdn.net/u010349169/article/details/40422941
博主主页:http://blog.csdn.net/luanlouis/

Mybatis初始化加载时-->Configuration-->根据Mybatis.xml和Mapper.xml配置文件创建一个或多个MappedStatement对象-->
将每个对象以key-value的形式存储到Configuration的一个Map中,其中key为(Statement ID)也就是namespace+id,value为对应的MappedStatement对象
可通过SqlSession.getConfiguration()获得Configuration对象
创建SqlSession-->根据Statement ID获得Configuration中对应的MappedStatement对象-->Executor根据SqlSession传递的参数执行query()方法-->创建StatementHandler,并让该对象根据参数执行数据库相关操作,获得返回结果
Executor的作用:(1)根据传递的参数,通过生成BoundSql对象,完成SQL语句的动态解析,以便StatementHandler使用
(2)为查询创建缓存,以提高性能。(这里应该是每次查询,先看是否有相应缓存,没有缓存再去数据库中执行sql语句查找)
(3)创建JDBC的Statement连接对象,传递给StatementHandler对象,返回List查询结果
StatementHandler对象主要工作:
(1)对于JDBC的PreparedStatement对象,会对其占位符?进行设置。(通过ParameterHandler对象)
(2)通过List<E> query(Statement statement, ResultSetHandler resultSetHandler)方法执行Statement,并将返回结果resultSet封装成List
Mybatis的原理相关的更多相关文章
- Mybatis插件原理分析(二)
在上一篇中Mybatis插件原理分析(一)中我们主要介绍了一下Mybatis插件相关的几个类的源码,并对源码进行了一些解释,接下来我们通过一个简单的插件实现来对Mybatis插件的运行流程进行分析. ...
- 【转】MaBatis学习---源码分析MyBatis缓存原理
[原文]https://www.toutiao.com/i6594029178964673027/ 源码分析MyBatis缓存原理 1.简介 在 Web 应用中,缓存是必不可少的组件.通常我们都会用 ...
- 深入理解MyBatis的原理:整个体系
前言:工作中虽然用到了 MyBatis,可完全不知道为什么,再不学习就晚了,这里将记录我的学习笔记,整个 MyBatis 的体系. 一.简介 1.传统的JDBC JDBC 是一种典型的桥接模式. 使用 ...
- Mybatis架构原理(二)-二级缓存源码剖析
Mybatis架构原理(二)-二级缓存源码剖析 二级缓存构建在一级缓存之上,在收到查询请求时,Mybatis首先会查询二级缓存,若二级缓存没有命中,再去查询一级缓存,一级缓存没有,在查询数据库; 二级 ...
- MyBatis工作原理
Mybatis工作原理: 我们的应用程序通过mybatis提供的api,增删改查方法来访问数据库,api底层调用了jdbc ,只不过mybatis对jdbc的封装是不完全封装,里面的sql语句需要我们 ...
- 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 ...
- spring boot 整合 mybatis 以及原理
同上一篇文章一样,spring boot 整合 mybatis过程中没有看见SqlSessionFactory,sqlsession(sqlsessionTemplate),就连在spring框架整合 ...
随机推荐
- Python 协程 61
什么是协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程. 协程的特点 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到 ...
- SVN客户端操作
版权声明:本文为博主原创文章,转载请注明原文出处. https://blog.csdn.net/zzfenglin/article/details/50937119 下面我们来了解一下SVN客户端 ...
- Multi-pattern string match using Aho-Corasick
我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...
- 可遇不可求的Question之MySqlClient的Guid 类型的映射篇
关于 Guid 类型的映射 MySql 没有原生的 Guid 类型,一般使用 binary(16) 或者 char(36) 这两个类型.早期版本的 Connector/Net 将 binary(16) ...
- OPC上传ONENET工具
这个去年做过比较死的 今年吸取人家转发网关配置工具的优点重做下
- 万里长征第一步:Python进程池的一点点小坑
# -*- coding: utf- -*- """ Created on Thu Mar :: @author: lilide """ # ...
- 你不知道的 #include
1.#include 指令 C++的程序中带 “#” 号的语句被称为宏定义或编译指令.#include在代码中是包含和引用的意思,例如:"#include <iostream>& ...
- 常用 ADB 命令[ZZ]
https://blog.csdn.net/yang_zhang_1992/article/details/71404186 1. 显示当前运行的全部模拟器: adb devices 2. 对某一模拟 ...
- J2EE导论 | 疑惑篇
J2EE是Java程序员从新手进阶的一个必经之路.要体会所谓的工业级代码,就必须要融入和经历更为复杂的开发.部署环境,需要同更多的模块.组件做信息流交换,比较和使用不同的框架,逐一去琢磨和考察它们的必 ...
- Java面试题精选,大型网站系统架构你不得不懂的10个问题
作者:JavaGuide(公众号) 下面这些问题都是一线大厂的真实面试问题,不论是对你面试还是说拓宽知识面都很有帮助.之前发过一篇8 张图读懂大型网站技术架构 可以作为不太了解大型网站系统技术架构朋友 ...