资讯专栏INFORMATION COLUMN

Mybatis缓存

mrcode / 1943人阅读

摘要:一级缓存和二级缓存缓存将语句查询出来对应的对象进行缓存,供后续对象使用。所以说,一级缓存是基于的。为了解决相互共享问题,提供二级缓存解决该问题。注意,一级缓存对每个对象要求他们在所有语句后必须执行语句,否则,不存在一级缓存。

Mybatis缓存

因为热爱,所以拼搏。 --RuiDer

前导必备
- 数据库
- Mybatis
Mybatis缓存
Mybatis提供缓存支持,志在提升开发的性能。数据库数据的索引一般是基于磁盘的,而内存和高速缓存相对磁盘的读写速度相当快,基本是磁盘读写数据的十倍。尤其在互联网开发中,追求速度,缓存为性能提供捷径。Mybatis缓存包括一级缓存和二级缓存,一级缓存基于SqlSession层面,二级缓存基于SqlSessionFactory层面。
一级缓存和二级缓存
缓存:将sql语句select查询出来对应的POJO对象进行缓存,供后续SqlSession对象使用。

一级缓存
    条件:
    - 同一个SqlSession对象
    - 同一个sql查询语句
    当同一个SqlSession对象进行两次相同select语句查询时,第一次会执行sql语句进行数据库的索引,
之后将所查询数据对应的POJO对象进行缓存;第二次执行相同参数的sql语句查询前,不会像第一次执行sql语句,
而是直接从缓存中索引数据对象。所以说,一级缓存是基于SqlSession的。不同的SqlSession对象的缓存不可以
共享,不能相互访问。为了解决相互共享问题,Mybatis提供二级缓存解决该问题。注意,一级缓存对每个SqlSession
对象要求他们在所有sql语句后必须执行commit语句,否则,不存在一级缓存。

    二级缓存
    条件:
    - 同一个SqlSessionFactory对象
    - 不同的SqlSession对象
    - 共享POJO对象、
    二级缓存是相对SqlSessionFactory对象而言的,同一个SqlSessionFactory创建的不同的SqlSession对象,
可以共享该SqlSessionFactory下的所有POJO对象,也就是数据库数据的共享。但是二级缓存要求对应的POJO类需要实现
序列化,也就是实现java.io.Serializable接口。
一级缓存 和 二级缓存 的配置
一级缓存:Mybatis默认一级缓存,只要每个SqlSession对象执行commit语句,都会存在一级缓存。
二级缓存:
    
    加入上述语句,就会开启二级缓存。二级缓存会进行序列化和反序列化的过程,所以说POJO
必须要实现Seriaizable接口。二级缓存cache元素会将select出来的POJO对象进行缓存,对于
insert,update,delete sql语句二级缓存会自动刷新。
二级缓存配置cache元素配置项
//cache接口源码
public interface Cache{
    //获取缓存id
    public int getId();
    
    //保存POJO对象,key为键,value为值
    public void putObject(Object key,Object value);

    //获取POJO对象
    public Object getObject(Object key);
    
    //清除缓存
    void clear();

    //获取缓存大小
    public int getSize();
    
    //获取读写锁,主要是多线程时使用
    ReadWriteLock getReadWriteLock();
}
配置Redis或者MongoDB缓存处理

    

我的GitHub

我的博客

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71405.html

相关文章

  • Mybatis【逆向工程,缓存,代理】知识要点

    摘要:一级缓存值得注意的地方默认就是支持一级缓存的,并不需要我们配置和整合后进行代理开发,不支持一级缓存,和整合,按照的模板去生成代理对象,模板中在最后统一关闭。总结的一级缓存是级别的。 前言 本文主要讲解Mybatis的以下知识点: Mybatis缓存 一级缓存 二级缓存 与Ehcache整合 Mapper代理 使用Mapper代理就不用写实现类了 逆向工程 自动生成代码 ...

    wanglu1209 评论0 收藏0
  • MyBatis知识点整理

    摘要:得到用户信息,将用户信息存储到一级缓存中。如果中间去执行操作执行插入更新删除,则会清空中的一级缓存,这样做的目的为了让缓存中存储的是最新的信息,避免脏读。 基础: 1、 概念:Java当中的一个持久层框架。2、 特点、优势:(1)把java代码和SQL代码做了一个完全分离。(2)良好支持复杂对象的映射(输入映射、输出映射)(3)使用动态SQL,可以预防SQL注入。3、 ...

    zhangqh 评论0 收藏0
  • MyBatis缓存介绍

    摘要:缓存介绍正如大多数持久层框架一样,同样提供了一级缓存和二级缓存的支持一级缓存基于的本地缓存,其存储作用域为,当或之后,该中的所有就将清空。一级缓存实现对的操作内部都是通过来执行的。 MyBatis缓存介绍   正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持   一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Se...

    mingde 评论0 收藏0
  • Spring Boot2(二):使用Spring Boot2集成Mybatis缓存机制

    摘要:本文章的源码再文章末尾什么是查询缓存有一级缓存和二级缓存。默认开启一级缓存。证明了一级缓存只是在数据库会话内部共享的。但是,整合到中后,一级缓存就会被关闭。根据时间表比如没有刷新间隔缓存不会以任何时间顺序来刷新。 仓库地址:spring-boot-learning欢迎star、fork,给作者一些鼓励 学习SpringBoot集成Mybatis的第二章,了解到Mybatis自带的缓存机...

    mikasa 评论0 收藏0
  • Spring Boot2(二):使用Spring Boot2集成Mybatis缓存机制

    摘要:本文章的源码再文章末尾什么是查询缓存有一级缓存和二级缓存。默认开启一级缓存。证明了一级缓存只是在数据库会话内部共享的。但是,整合到中后,一级缓存就会被关闭。根据时间表比如没有刷新间隔缓存不会以任何时间顺序来刷新。 仓库地址:spring-boot-learning欢迎star、fork,给作者一些鼓励 学习SpringBoot集成Mybatis的第二章,了解到Mybatis自带的缓存机...

    NSFish 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<