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接口的动态代理这个核心代码这边发现一个问题. ...
随机推荐
- js获取当前日期的前七天,月份+日(数组)
1.定义一个空对象. let dayArr = []: 2.时间格式化 function formatterDate(date,fmt){ let nowDate = { yyy ...
- k8s配置拉取镜像密钥
一.部署步骤 1.创建阿里云镜像仓库 2.创建Secret绑定镜像仓库账号 3.创建Deployment绑定Secret 二.创建阿里云镜像仓库 1.进入阿里云容器镜像服务,创建个人版实例 2.设置登 ...
- Java流程控制1
Scanner对象 java.util.Scanner 通过Scanner类来获取用户输入 next()和nextline()来获取输入的字符串,读取前我们一般需要使用hasnext()和hasnex ...
- 十大经典排序之桶排序(C++实现)
桶排序 桶排序是计数排序的升级版.它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定 思路: 根据数据规模,初始化合理桶数 将数列中的数据按照桶的规模进行映射,尽量保证数据被均匀的分布到桶 ...
- STL练习-ACboy needs your help again!
ACboy was kidnapped!! he miss his mother very much and is very scare now.You can't image how dark ...
- c# 连接SQLite 查询数据 写入txt文本
using Newtonsoft.Json.Linq; using System; using System.Data.SQLite; using System.IO; namespace @publ ...
- echarts数据过小,log类型无法出现刻度线,并将y轴转为科学计数法
方法仅供参考 可以更改logBase的值,数值越小刻度线越多,但也会出现,刻度值重复的问题,看各自需要,其次是对数据进行处理,全部变成大于1的数,最后在echarts的图表显示设置中更改回来 注意:对 ...
- Windows 10 输入法(仅桌面) %100 解决
大家好,今天我遇到了一件非常难受的一件事,那就是 WIndows 自带的输入发问题,无法输入中文!!! 这时我去网上找找解决方案,总结了一下几个: 文件检查 步骤 以管理员身份运行PowerShell ...
- Java学习笔记-BigDecimal类型
1.介绍 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更 ...
- vs2022和wsl2开发和调试c++代码(转载)
看见一个不错的帖子(知乎) https://zhuanlan.zhihu.com/p/390757559 里面最主要就是要保证wsl里面安装的东西够了,第二就是vs2022已经安装了linux的相关模 ...