Mybatis的整体理解
I有关于我的对ybatis的设想:
简单总结-下有关于我对wybat is的架构理解:
总体分为三个层面:
1.对外接口API
2.MapStatement数据处理
3.执行及其数据存储
两个主要的对象apperStatemnent (从xm1解析出来的信息,stattementid (namespace+方法名〉,对象的路径主要使用:
sq lsession :主要功能获取会话,数据交互。
executor :执行器负责sq l的执行。由sinp leExecuter(默认的主要执行器),BacthExecnter,ReuseExecutorstatementHandler : jdbc的封装,设置参数,以及把结果集进行封装。
paremeterHandler :对传递过来的参数set到statement内。
resultSetHandler :负责把jdbc封装的结果集转化为list
typeHandler :负责Java和数据类型,jdbc数据类型的转换
apperStatement :把mapper内的增删改查xm1解析出阿里。
Sqlsource :把传入的参数对象和解析sq1语句送到bandsql。
bandsql :负责动态生成sql和参数形象
主要实现代理模式,工厂模式,构建模式
缓存部分
一级缓存:
在sqlSession的范围内,对从数据库获取的数据进行缓存,在每次dml操作时做刷新。sqlsession关闭
当前缓存结束。
二级缓存:
在mapper层级内,对多个sqlsession所共享的查询缓存资源,同一个mapper下的查询都会被缓存进来,但是把一级缓存存到二级缓存是在sqlsession结束以后,close之后,才会进行flush的刷新操作。
当然没有进行过dml操作,以及执行的查询操作有缓存的情况下不手动刷新也是不会刷新的。
一级缓存和二级缓存都是使用hashmap作为结构进行操作的。一级缓存默认开启二级缓存需要手动。
但是二级缓存过于鸡肋,一般使用其他三分作为二级缓存,例如redis。(mybatis和redis是有相关的集成)使用二级缓存要把所有的实体类序列化,因为他们是可以被存在银盘上的。
缓存使用的key有多个部分:statementID,参数列表,封装结果集。组合,所用的值为获取到的数据集合,list而不是实体类。
自定义插件
mybatsi的方法增强。
主要可以对一下四个组件进行拦截,使用拦截标签。
ececuter
statementHandler
paramterHandler
resultsethandler
使用拦截标签后再拦截犯法前后进行相关的处理逻辑
记得要拿自己的拦截配置到sqlmapper.xml中
Mybatis的整体理解的更多相关文章
- 浅析MyBatis(一):由一个快速案例剖析MyBatis的整体架构与运行流程
MyBatis 是轻量级的 Java 持久层中间件,完全基于 JDBC 实现持久化的数据访问,支持以 xml 和注解的形式进行配置,能灵活.简单地进行 SQL 映射,也提供了比 JDBC 更丰富的结果 ...
- Mybatis之整体描述
Mybatis在我看来最大的用处就是封装了jdbc,设置参数操作和获取解析结果集.同时控制了数据库链接等操作,大部分采用了反射来映射javabean对象来进行数据库操作. 1.接下来先整体介绍下主要的 ...
- 01 mybatis框架整体概况(2018.7.10)-
01 mybatis框架整体概况(2018.7.10)- F:\廖雪峰 JavaEE 企业级分布式高级架构师课程\廖雪峰JavaEE一期\第一课(2018.7.10) maven用的是3.39的版本 ...
- 项目总结2——mybatis配置的理解
之前的项目基本上都是用mongodb,以至于mysql相关的知识异常薄弱,这次连续一个半月的加班,总算是实际用到了mysql,也使自己对mysql了解的更多,对mybatis了解的更多,这里就说一说经 ...
- MINA 框架总结 整体理解
MINA是一套成熟的JAVA NIO 框架,在用到Socket通信的Java应用场景中经常会得到使用.其作者还有一套更加知名的框架Netty,其应用程度更加广泛.虽然不及Netty知名,Mina也是一 ...
- Mybatis 入门到理解篇
MyBatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code, ...
- Spring SpringMVC myBatis(简称SSM)理解
1对Spring的理解 (1)spring是什么? spring是Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架. (2)spring的作用 (a)spring ...
- CMMI整体理解
CMMI的目的,一是质量,二是时间表,三是最低的成本:我的理解就是即以最低的成本,在既定的时间表要求下,达到相应的质量水平. CMMI是什么?我的理解是,CMMI并不是一个过程说明书,它不是告诉我们怎 ...
- 学习Hadoop整体理解
HDFS是Hadoop的核心模块之一,围绕HDFS是什么.HDFS的设计思想和HDFS的体系结构三方面来介绍. Hadoop的设计思想受到Google公司的GFS设计思想的启示,基于一种开源的理念实现 ...
- 从Mybatis源码理解jdk动态代理默认调用invoke方法
一.背景最近在工作之余,把开mybatis的源码看了下,决定自己手写个简单版的.实现核心的功能即可.写完之后,执行了一下,正巧在mybatis对Mapper接口的动态代理这个核心代码这边发现一个问题. ...
随机推荐
- python使用openpyxl读取合并单元格的值(转)
目录问题:解决思路:问题:假设在test.xlsx的"Sheet1"工作表中,A1:D3区域的值如下:要求给定指定的行.列以及对应的工作表作为参数,能够正确解析合并单元格,获取指定 ...
- 励志成为python大佬的第一天
1.编码 2.格式化字符 3.list,dict,tuple,set 4.return 5.参数
- sql学习笔记 - 1 数据库简介
数据库简介 """ 本学习笔记来自哔哩哔哩--老男孩Python全栈开发29期全套 https://www.bilibili.com/video/BV1QE41147hU ...
- curl curl请求
$params=[ "a"=>"test", "b"=>"测试" ]; $header=[ "Co ...
- java文本转语音
下载jar包https://github.com/freemansoft/jacob-project/releases 解压,将jacob-1.18-xxx.dll相应放到项目使用的JAVA_HOME ...
- Qt中的渲染
Qt中3种不同的渲染方式 1 )Qt::AA_UseDesktopOpenGL 使用显卡的openGL库,且要求支持openGL 2.1及以上的版本.因此很多老旧设备是不满足版本要求的(windows ...
- 使用react-vite-antd,修改antd主题,报错 [vite] Internal server error: Inline JavaScript is not enabled. Is it set in your options? It is hacky way to make this function will be compiled preferentially by less
一般报错 在官方文档中,没有关于vite中如何使用自定义主题的相关配置,经过查阅 1.安装less yarn add less (已经安装了就不必再安装) 2.首先将App.css改成App.les ...
- Node.js server使用
一.创建项目 #创建项目目录 cd /data mkdir webroot cd webroot #初始化git git init vim .gitignore 输入: node_modules/ 保 ...
- vs2010 Windows程序打包成安装包方法
1. 在vs2010 选择"新建项目"--"其他项目类型"--"Visual Studio Installerà"安装项目": ...
- Activiti7开发(二)-流程定义
目录 1.部署流程模型为流程定义 2.挂起/激活流程定义 3.删除流程定义 4.查询流程定义 5.上传并部署流程定义 6.查看流程模型 1.部署流程模型为流程定义 @PostMapping(value ...