Skip to content
目录概览

MyBatis 中一级缓存与二级缓存的区别?

缓存:合理使用缓存是优化中最常见的方法之一,将从数据库中查询出来的数据放入缓存中,下次使用时不必从数据库查询,而是直接从缓存中读取,避免频繁操作数据库,减轻数据库的压力,同时提高系统性能。

  • 一级缓存是SqlSession级别的缓存: MyBatis对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓存。一级缓存在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构用于存储缓存数据。不同的sqlSession之间的缓存数据区域是互相不影响的。也就是他只能作用在同一个sqlSession中,不同的sqlSession中的缓存是互相不能读取的。 img

  • 二级缓存是mapper级别的缓存: MyBatis的二级缓存是mapper级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能。多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。 img

开启二级缓存:

  1. mybatis.xml配置文件中加入:

    <settings>    
       <setting name="cacheEnabled" value="true"/>    
    </settings>
    
    1
    2
    3
  2. 在需要开启二级缓存的mapper.xml中加入caceh标签

    <cache/>
    
    1
  3. 让使用二级缓存的POJO类实现Serializable接口

    public class User implements Serializable {} 
    
    1