spring 一级和二级缓存

最近面试总是被问到spring的一些问题,包括spring的一级和二级缓存的问题,那么究竟什么事一级缓存,什么是二级缓存呢。

一级缓存

盗用一下别人的图,自己是在是懒得画图了:
spring 一级和二级缓存_第1张图片
一级缓存就是停留在sqlsession级别的,它是用一个hashmap来保存的。也就是你使用比如:

 <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="com.test.mapper.bo.CpPricemakingFactorKey" >
    select 
    "Base_Column_List" />
    from cp_pricemaking_factor
    where TENANT_ID = #{tenantId,jdbcType=VARCHAR}
      and PRICE_PRODUCT_TYPE = #{priceProductType,jdbcType=VARCHAR}
      and FACTOR_NAME = #{factorName,jdbcType=VARCHAR}
      and PRICE_PRODUCT_ID = #{priceProductId,jdbcType=VARCHAR}
  select>

那么当我们使用同一个select的时候,他们会先从hashmap里找数据,如果没有再从数据库里查,但是一旦出现更新操作或者这个service方法技术,那么该sqlsession将会关闭,缓存也将会消失。

二级缓存

二级缓存在spring是默认关闭的,我们需要在配置文件里打开。他是mapper级别的,也就是说同一个result的多个sqlsession都可以共用这一个hashmap做的缓存。
再次盗用:
spring 一级和二级缓存_第2张图片

你可能感兴趣的:(web)