MyBatis 支持三种缓存策略:
- 缓存不生效(实际上还是有一级缓存)
通过设置 实现:
<select id="getUser" resultType="com.some.example.User">
select * from users where id = #{id}
<cache-ref />
</select>
- 只启用本地缓存(一级缓存)
通过设置 scope=”local” 实现:
<select id="getUser" resultType="com.some.example.User">
select * from users where id = #{id}
<cache scope="local"/>
</select>
- 启用本地缓存和全局缓存(二级缓存)
通过设置 scope=”session” 实现:
<select id="getUser" resultType="com.some.example.User">
select * from users where id = #{id}
<cache scope="session"/>
</select>
这三种策略的区别是:
- 缓存不生效:不使用任何缓存
- 只启用本地缓存:只使用 SqlSession 级别的缓存
- 启用本地缓存和全局缓存:同时使用一级缓存和二级缓存
总的来说:
- 一级缓存默认开启,不需要显式配置。
- 二级缓存需要在 SqlSessionFactoryBuilder中开启,再在映射文件设置。
- scope=”local” 只使用一级缓存
- scope=”session”同时使用一、二级缓存