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接口的动态代理这个核心代码这边发现一个问题. ...
随机推荐
- java 操作excel
需要引入的包 import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.HorizontalAlignmen ...
- white album句子
1.不论是真心的笑,还是真心的生气,我都做不到.我只是个胆小的骗子.
- localtime函数
localtime函数: 将时间数值变换成本地时间,考虑到本地时区和夏令时标志; 原型: struct tm *localtime(const time_t * calptr); 头文件 <ti ...
- Hspui的使用,NJUPT
一.打开Hspui,进入UI界面 二.添加.sp文件 File->Open打开想要仿真的文件 三.运行仿真 点击Simulate 四.观察结果 点击Waveview进入波形观察器 选中目录下要观 ...
- 深入理解Linux系统调用
1.系统调用号查询 我的学号位数是08,在64位调用表里可以查到对应的系统调用函数是__x64_sys_lseek 2.lseek函数 由于没用过该函数,所以先去了解一下这个函数的作用: 直白的说就是 ...
- manu check RAID GEM count and Fragment count of local FN>1
cat MANU_CHK.sh echo "input Chr" read C echo "input Start" read S echo "inp ...
- How to Install VMware Tools on CentOS 6.5
yum install perl gcc make kernel-headers kernel-devel -y [root@centos6 vmware-tools-distrib]# ./vmwa ...
- 在DeepIn系统中使用eclipse创建maven的Web项目
1. 安装好jdk和eclipse以后,启动eclipse 2. 创建maven项目,选择Maven Project 3. 在创建项目过程中,创建简单Maven项目,不使用archetype创建(会联 ...
- ASP.NET的MVC模式中分布页和布局页的使用
大概描述一下,分布页是布局页的一部分,分布页就相当于小图标,布局页就相当于PPT模板,PPT模板可以加入一些小图标(分布页),你只需要改改内容就好,视图创建的时候要选择包含布局页的 首先,去Contr ...
- ORACLE 去重
-----------------------------------------------------------------------------模拟数据------------------- ...