Mybatis的一级缓存 : 是指SqlSession。一级缓存的作用域是一个SqlSession。Mybatis默认开启一级缓存。
在同一个SqlSession中,执行相同的查询SQL,第一次会去查询数据库,并写到缓存中;第二次直接从缓存中取。当执行SQL时两次查询中间发生了增删改操作,则SqlSession的缓存清空。
- 一级缓存是SqlSession自带的。SqlSession对象被创建,一级缓存就存在了。
- 如果SqlSession对象关闭或调用清理方法,会导致缓存失效。
- 缓存底层实现就是通过HashMap实现的。
- 一级缓存介质——内存
Mybatis的二级缓存 : 是指mapper映射文件。二级缓存的作用域是同一个namespace下的mapper映射文件内容,多个SqlSession共享。Mybatis需要手动设置启动二级缓存。(设置完后运行可能会报错;需要给namespace所对的对象实体添加序列化,包括对象中的对象); 二级缓存是在硬盘里面,不是在内存里面,出现该问就是硬盘中的文件需要存放在内存里面.
如下就是报的错:
需要在mybatis配置文件配置:
还需要在xxxMapper.xml 中配置一个属性:
二级缓存进行缓存的时刻:
在同一个namespace下的mapper文件中,执行相同的查询SQL,第一次会去查询数据库,并写到缓存中;第二次直接从缓存中取。当执行SQL时两次查询中间发生了增删改操作,则二级缓存清空。