------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------

缓存------------------------------------------》

  很熟悉的一个词,什么是缓存?

  好多人都不太能解释清楚缓存的概念,运用到缓存的地方大家都很清楚,像什么网站了,视频缓存啊,等等

  我从百度百科copy一个缓存的概念,读一下,免得看完这篇博客都对缓存的概念一无所知

  缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。

-------------------------------》

  有了一定概念了把,MyBatis中有些实现不同,不过意思相似,不然也不会叫做缓存

MyBatis中一级缓存(他是默认开启的)

    在同一个SqlSession中,执行相同的查询SQL,第一次会去查询数据库,并写到缓存中;第二次直接从缓存中取。

    MyBatis缓存里面实则是个hashmap,key值为hashcode+selectId+sql语句,value为查询返回结果的内存地址的引用(指针),

-------------------------------》

  哦,笔者你讲了这么多,不是废话吗?默认开启,不需要手动配置,手动使用,我看了有什么用?

  是为了更好的理解编程的灵魂,深入它的全部,才会有所成

-------------------------------》

一级缓存存在性的证明

  说了这么多,笔者你怎么知道有一级缓存存在呢?如果别人问我,我怎么更快的跟他解释清楚呢?

  单测方法

    /*一级缓存存在性证明sql*/
@Test
public void t2LevelOneCacheHasExist(){
SqlSession session= MyBatisUtils.getSession(); IDeptDAO mapper = session.getMapper(IDeptDAO.class);
Dept d1 = mapper.findDeptnoALLEmpsMoreSql(); System.out.println(d1.getDeptName());
System.out.println("==================我是特别的高贵的分割线==================");
Dept d2 = mapper.findDeptnoALLEmpsMoreSql();
System.out.println(d2.getDeptName()); session.close(); }

  运行结果

    

  看到分割线下面了吗?没有对数据库做sql语句的查询操作,直接得的结果,难道还不能说明它中间有一道,从缓存中拿的结果吗?(上面俩条sql是因为做的关联查询的直接加载)

--------------------------------------》

增删改对一级缓存的影响:

  口说无凭,我直接放代码

  单测方法

  

    /*增删改对一级缓存的影响*/
@Test
public void t3IUDForLevelOneCache(){
SqlSession session= MyBatisUtils.getSession(); IDeptDAO mapper = session.getMapper(IDeptDAO.class);
Dept d1 = mapper.findDeptnoALLEmpsMoreSql(); System.out.println(d1.getDeptName()); Dept dept=new Dept();
dept.setDeptName("无敌是多么寂寞部");
mapper.addDept(dept);
System.out.println("==================我是特别的高贵的分割线==================");
Dept d2 = mapper.findDeptnoALLEmpsMoreSql();
System.out.println(d2.getDeptName()); session.close(); }

  下面我放运行结果

    

  在分割线后又做了查询,说明了增删改会对缓存进行清空操作,清空操作

本次博客说明了mabatis中一级缓存的存在性证明 (存在的),增删改对一级缓存的影响(会清空一级缓存)-----》

透露一下,下次博客:《mybatis二级缓存》

SSM-MyBatis-17:Mybatis中一级缓存(主要是一级缓存存在性的证明,增删改对一级缓存会造成什么影响)的更多相关文章

  1. 我来讲讲在c#中怎么进行xml文件操作吧,主要是讲解增删改查!

    我把我写的四种方法代码贴上来吧,照着写没啥问题. 注: <bookstore> <book> <Id>1</Id> <tate>2010-1 ...

  2. MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存

    目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...

  3. 【SSM 7】Mybatis底层封装思路

    一.基本概述 在前面的博客中介绍到Mybatis的逆向生成工具,为我们生成了每个实体的基本增删改查的代码,那么每个实体都是那么多的代码,我们很容易的发现,有很大的相似性.对于这部分代码,应该予以抽象封 ...

  4. Spring Boot入门系列(六)如何整合Mybatis实现增删改查

    前面介绍了Spring Boot 中的整合Thymeleaf前端html框架,同时也介绍了Thymeleaf 的用法.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/z ...

  5. SpringMVC之简单的增删改查示例(SSM整合)

    本篇文章主要介绍了SpringMVC之简单的增删改查示例(SSM整合),这个例子是基于SpringMVC+Spring+Mybatis实现的.有兴趣的可以了解一下. 虽然已经在做关于SpringMVC ...

  6. SSM整合_年轻人的第一个增删改查_基础环境搭建

    写在前面 SSM整合_年轻人的第一个增删改查_基础环境搭建 SSM整合_年轻人的第一个增删改查_查找 SSM整合_年轻人的第一个增删改查_新增 SSM整合_年轻人的第一个增删改查_修改 SSM整合_年 ...

  7. IOS9中联系人对象的使用及增删改查操作的函数封装

    之前克服重重困难把IOS9中新的类联系人搞明白了,现在把增删改查封装成了函数,如下: // // ViewController.m // IOS9中联系人CNContact的使用 // // Crea ...

  8. SQLite中的增删改查

    虽然android提供了sql查询的封装方法,但是理解起来还是麻烦,所以我这里用sql语句来完成工作. 首先是建立一个类,继承SQLiteOpenHelper 这里面会建立一个数据库,并且初始化一个表 ...

  9. 在ASP.NET MVC中对表进行通用的增删改

    http://www.cnblogs.com/nuaalfm/archive/2009/11/11/1600811.html 预备知识: 1.了解反射技术 2.了解C#3.0中扩展方法,分布类,Lin ...

随机推荐

  1. iOS实现时间线列表效果(例如订单详情页面的效果)

    之前看到美团的订单详情页面很有特色,于是决定模仿一下这个效果. 其实就是简单的 TableView 技巧,下面我们就来一步一步实现它. 设计 TableViewCell 原型 子类化一个新的 UITa ...

  2. 添加启动游戏过渡场景Default Splash Scene(Unity3D开发之十三)

    添加启动游戏过渡场景Default Splash Scene(Unity3D开发之十三) 猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blo ...

  3. android 线程那点事

    在操作系统中,线程是操作系统调度的最小单元,同时线程又是一种受限的系统资源,即线程不可能无限制的产生,并且线程的创建和销毁都会有相应的开销,当系统中存在大量的线程时,系统会通过时间片轮转的方式调度每个 ...

  4. "《算法导论》之‘线性表’":基于动态分配的数组的顺序表

    我们利用静态分配的数组来实现的顺序表的局限还是挺大的,主要在于它的容量是预先定好的,用户不能根据自己的需要来改变.如果为了后续用户能够自己调整顺序表的大小,动态地分配数组空间还是很有必要的.基于动态分 ...

  5. Leetcode_237_Delete Node in a Linked List

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/47334649 Write a function to de ...

  6. RTMPdump(libRTMP) 源代码分析 9: 接收消息(Message)(接收视音频数据)

    ===================================================== RTMPdump(libRTMP) 源代码分析系列文章: RTMPdump 源代码分析 1: ...

  7. 从开发者角度解析 Android N 新特性!

    大清早看到 Google 官方博客发布 Android N 的开发者预览版,立马从床上跳起来开始仔仔细细的读起来. 从开发者角度来看,Android N 的更新并不算大.网上之前流传的一些 Andro ...

  8. linux下创建且挂载光盘镜像

    在linux下可以很方便的将多个文件,或多个文件夹下的内容打包进光盘镜像中,我们可以用: mkisofs -r -v -o xxx.iso /root /home 命令将/root以及/home目录下 ...

  9. mybatis ---- 级联查询 一对多 (集合映射)

    关联有嵌套查询和嵌套结果两种方式,本文是按照嵌套结果这种方式来说明的 上一章介绍了多对一的关系,用到了<association></association>,这是一个复杂类型的 ...

  10. rails应用ajax之一:使用纯js方法

    考虑如下需求: 1. 用户输入一个用户名,当焦点跳出文本框时,检查该用户名是否有效 2. 动态更新检查的结果 我们使用ajax的方式来实现这个简单的功能,首先建立view:check.html.erb ...