其他分享
首页 > 其他分享> > Mybatis缓存

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()

标签:getMapper,缓存,StudentMapper,sqlSession,二级缓存,SqlSession,Mybatis,class
来源: https://www.cnblogs.com/zhichun/p/12271575.html