Mybatis缓存

缓存用于减轻数据压力,提高数据库性能,mybaits提供一级缓存和二级缓存。

1.一级缓存:SqlSession级别的缓存,默认开启。在操作数据库时需要构造sqlSession对象,在对象中有一个key为hashCode+sqlId+sql,value为查询结果映射的java对象的HashMap数据结构用于存储缓存数据。不同的sqlSession之间的缓存数据区域是互相不影响的,在同一个sqlSession中两次执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到内存缓存中,第二次会从缓存中获取数据而不再从数据库查询,从而提高查询效率。当一个sqlSession执行插入、更新、删除、结束操作后为了避免脏读会清空该sqlSession中的一级缓存。

2.二级缓存:mapper namespace级别的缓存,默认不开启,需要在全局参数及mapper.xml中配置开启并且缓存对象value必须实现序列化。在缓存对象中有一个key为hashCode+sqlId+sql,value为查询结果映射的java对象的HashMap数据结构用于存储缓存数据。不同的sqlSession两次执行相同namespace下的sql且向sql中传递参数也相同则最终执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到内存缓存中,第二次会从缓存中获取数据而不再从数据库查询,从而提高查询效率。当一个sqlSession执行插入、更新、删除操作后为了避免脏读会清空该namespace中的二级缓存。二级缓存一般应用于访问多的粗粒度查询请求且用户对查询结果实时性要求不高,根据数据变化频率设置缓存刷新间隔flushInterval来自动清空缓存。

3.分布式缓存:mybatis无法实现分布式缓存,需要和其它分布式缓存框架进行整合。

你可能感兴趣的:(MyBatis)