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的整体理解的更多相关文章

  1. 浅析MyBatis(一):由一个快速案例剖析MyBatis的整体架构与运行流程

    MyBatis 是轻量级的 Java 持久层中间件,完全基于 JDBC 实现持久化的数据访问,支持以 xml 和注解的形式进行配置,能灵活.简单地进行 SQL 映射,也提供了比 JDBC 更丰富的结果 ...

  2. Mybatis之整体描述

    Mybatis在我看来最大的用处就是封装了jdbc,设置参数操作和获取解析结果集.同时控制了数据库链接等操作,大部分采用了反射来映射javabean对象来进行数据库操作. 1.接下来先整体介绍下主要的 ...

  3. 01 mybatis框架整体概况(2018.7.10)-

    01 mybatis框架整体概况(2018.7.10)- F:\廖雪峰 JavaEE 企业级分布式高级架构师课程\廖雪峰JavaEE一期\第一课(2018.7.10) maven用的是3.39的版本 ...

  4. 项目总结2——mybatis配置的理解

    之前的项目基本上都是用mongodb,以至于mysql相关的知识异常薄弱,这次连续一个半月的加班,总算是实际用到了mysql,也使自己对mysql了解的更多,对mybatis了解的更多,这里就说一说经 ...

  5. MINA 框架总结 整体理解

    MINA是一套成熟的JAVA NIO 框架,在用到Socket通信的Java应用场景中经常会得到使用.其作者还有一套更加知名的框架Netty,其应用程度更加广泛.虽然不及Netty知名,Mina也是一 ...

  6. Mybatis 入门到理解篇

    MyBatis         MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code, ...

  7. Spring SpringMVC myBatis(简称SSM)理解

    1对Spring的理解 (1)spring是什么? spring是Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架. (2)spring的作用 (a)spring ...

  8. CMMI整体理解

    CMMI的目的,一是质量,二是时间表,三是最低的成本:我的理解就是即以最低的成本,在既定的时间表要求下,达到相应的质量水平. CMMI是什么?我的理解是,CMMI并不是一个过程说明书,它不是告诉我们怎 ...

  9. 学习Hadoop整体理解

    HDFS是Hadoop的核心模块之一,围绕HDFS是什么.HDFS的设计思想和HDFS的体系结构三方面来介绍. Hadoop的设计思想受到Google公司的GFS设计思想的启示,基于一种开源的理念实现 ...

  10. 从Mybatis源码理解jdk动态代理默认调用invoke方法

    一.背景最近在工作之余,把开mybatis的源码看了下,决定自己手写个简单版的.实现核心的功能即可.写完之后,执行了一下,正巧在mybatis对Mapper接口的动态代理这个核心代码这边发现一个问题. ...

随机推荐

  1. Linux系统管理实战-软件包管理

    软件包管理 在Linux中,不同的发行版软件管理的方式可能不一样,具体来说,主要分为两大派: RPM: Rpm Package Manager CentOS系统软件安装三种方式 rpm:安装简单,可定 ...

  2. 12.8 linux学习第十五天

    今天老刘讲了第11章和第12章,感觉讲的速度很快,一气呵成,水都没怎么喝. 11.1 文件传输协议 一般来讲,人们将计算机联网的首要目的就是获取资料,而文件传输是一种非常重要的获取资料的方式.今天的互 ...

  3. spring管理配置文件实现注入

    创建配置文件 写入以下内容: 创建配置文件的bean: <bean id="configProperties" class="org.springframework ...

  4. SpringMVC配置文件applicationContext.xml头信息

    applicationContext.xml头信息 <?xml version="1.0" encoding="UTF-8"?> <beans ...

  5. Vue学习day1

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title&g ...

  6. mysql主从同步复制

    主从同步原理 master记录数据操作 开启binlog日志 设置binlog日志格式 指定server_id slave启用俩个线程 slave_io:复制master主机binlog日志为文件里的 ...

  7. (二).JavaScript的运算符和表达式,数据类型转化

    4. 运算符和表达式 4.3 赋值运算符和表达式 1.赋值运算符 = 作用:赋值运算符就是将右边的内容赋值给左边的变量或属性. var result = 1 + 2; 2.复合赋值运算符 +=,-=, ...

  8. decode procedure

    1  test data preparation 1>  select representative data voice to match real application scenario ...

  9. 5.Vue前后端交互

    一.前后端交互模式 1.1 接口调用方式 原生ajax 基于JQuery的ajax fetch axios 返回一个完整的HTML页面 也可以只返回特定格式的数据,比如json 1.2 URL地址格式 ...

  10. How to Apply WebLogic Server (WLS) Patches Using Smart Update

    本文目的: 描述weblogic10.3.6及之前的版本,如何通过Smart Update打补丁 先决条件: You should download and apply the enhanced Sm ...