博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis学习及原理解析(二)
阅读量:3906 次
发布时间:2019-05-23

本文共 2073 字,大约阅读时间需要 6 分钟。

mybatis学习及原理解析(二)

一级缓存数据结构

在这里插入图片描述

找到PerpetualCache,

一级缓存实质上是一个HashMap对象

缓存何时被创建的?

public CacheKey createCacheKey(MappedStatement ms, Object parameterObject, RowBounds rowBounds, BoundSql boundSql) {
if (this.closed) {
throw new ExecutorException("Executor was closed."); } else {
CacheKey cacheKey = new CacheKey(); cacheKey.update(ms.getId()); cacheKey.update(rowBounds.getOffset()); cacheKey.update(rowBounds.getLimit()); cacheKey.update(boundSql.getSql()); List
parameterMappings = boundSql.getParameterMappings(); TypeHandlerRegistry typeHandlerRegistry = ms.getConfiguration().getTypeHandlerRegistry(); Iterator var8 = parameterMappings.iterator(); while(var8.hasNext()) {
ParameterMapping parameterMapping = (ParameterMapping)var8.next(); if (parameterMapping.getMode() != ParameterMode.OUT) {
String propertyName = parameterMapping.getProperty(); Object value; if (boundSql.hasAdditionalParameter(propertyName)) {
value = boundSql.getAdditionalParameter(propertyName); } else if (parameterObject == null) {
value = null; } else if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) {
value = parameterObject; } else {
MetaObject metaObject = this.configuration.newMetaObject(parameterObject); value = metaObject.getValue(propertyName); } cacheKey.update(value); } } if (this.configuration.getEnvironment() != null) {
cacheKey.update(this.configuration.getEnvironment().getId()); } return cacheKey; } }

可以看到,在Executor中创建了cache,

key值中保存了,statementId+分页信息+sql语句+mybatis配置信息
value保存了doQuery查询出的保存结果

一级缓存工作原理

在这里插入图片描述

转载地址:http://jamen.baihongyu.com/

你可能感兴趣的文章
部门年度工作总结的内容
查看>>
pandas学习笔记
查看>>
Numpy笔记
查看>>
正则表达式
查看>>
python线程进程笔记
查看>>
TensorFlow初学者必须了解的55个经典案例
查看>>
机器学习笔记
查看>>
数十种TensorFlow实现案例汇集:代码+笔记
查看>>
python记录的错误与知识
查看>>
内核中各种套接字的关系
查看>>
linux sysctl 参数实现 暨 ip_forward参数对Linux内核转发影响分析
查看>>
linux 路由表 的一些相关资料
查看>>
Linux 路由 学习笔记 之三 路由查找流程分析
查看>>
LINUX IP 路由实现
查看>>
快速重传与快速恢复算法
查看>>
TCP重传定时器
查看>>
CentOS 6.3 - 安装 Nginx 1.2.7(yum源)
查看>>
shell中trap捕获信号
查看>>
关于Linux Shell的信号trap功能你必须知道的细节
查看>>
Linux原始套接字实现分析
查看>>