Mybatis缓存

Posted zhichun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis缓存相关的知识,希望对你有一定的参考价值。

Mybatis一级、二级缓存

一级缓存:

同一个SqlSession对象

技术图片


SqlSession sqlSession = SqlSessionFactoryUtils.openSqlSession();

RoleMapper roleMapper = sqlession.getMapper(RoleMapper.class);

Role role = roleMapper.getRole(1);
Role role2 = roleMapper.getRole(1);

第二次访问时,不再查询数据库,直接从sqlSession中取值。

如果执行

sqlSession.commmit()

则清理,一级缓存

二级缓存:

技术图片

Mybatis自带二级缓存,同一个namespace生成的mapper对象,
namespace的值就是接口的全类名,通过接口可以产生代理对象(studentMapper对象)

StudentMapper studentMapper  = session.getMapper(StudentMapper.class);

如果是同一个接口,则是二级缓存

SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build();

SqlSession sqlSession = new SqlSessionFactory.openSession();

StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);

SqlSession sqlSession2 = new SqlSessionFactory.openSession();

StudentMapper studentMapper2 = sqlSession.getMapper(StudentMapper.class);

开启二级缓存

<setting name="cacheEnabled" value="true"/>

声明

<cache/>

序列化:从内存-〉硬盘

反序列化:从硬盘-〉内存

触发将对象执行二级缓存的时机:

学生序列化,学生中的级联属性和父session.close()
进行缓存的时刻

禁用:

useCache="false"

清理:

commit()

以上是关于Mybatis缓存的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis关于复杂的SQL查询的处理&Mybatis的缓存机制

Mybatis 学习笔记总结

推荐学java——MyBatis高级

推荐学java——MyBatis高级

推荐学java——MyBatis高级

推荐学java——MyBatis高级