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缓存的主要内容,如果未能解决你的问题,请参考以下文章