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

  1. 云栖社区>
  2. 博客>
  3. 正文

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

晨曦dawn 2018-02-27 20:23:00 浏览665
展开阅读全文

 

 

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

 

 

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

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

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

  我从百度百科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(1);

        System.out.println(d1.getDeptName());
        System.out.println("==================我是特别的高贵的分割线==================");
        Dept d2 = mapper.findDeptnoALLEmpsMoreSql(1);
        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(1);

        System.out.println(d1.getDeptName());

        Dept dept=new Dept();
        dept.setDeptName("无敌是多么寂寞部");
        mapper.addDept(dept);
        System.out.println("==================我是特别的高贵的分割线==================");
        Dept d2 = mapper.findDeptnoALLEmpsMoreSql(1);
        System.out.println(d2.getDeptName());

        session.close();

    }

  下面我放运行结果

    

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

 

 

 

 

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

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

 

网友评论

登录后评论
0/500
评论
晨曦dawn
+ 关注