mybatis 整合ehcache实现缓存

mybatis 整合ehcache实现缓存
   mybatis 一级缓存和二级缓存的区别:
1、一级缓存:基于PerpetualCache的HashMap本地缓存,其存储作用域为同一个SqlSession,当Session flush或close之后,该Session中的所有Cache就将清空。
2、二级缓存:与一级缓存其机制相同,默认也是采用PerpetualCache,HashMap存储,不同在于其存储作用域为Mapper(Namespace),并且可自定义存储源,如Ehcache。
3、对于缓存数据更新机制,当某一个作用域(一级缓存Session/二级缓存Namespaces)的进行了C/U/D操作后,默认该作用域下所有select中的缓存将被clear。
如果要实现MyBatis的二级缓存,一般来说有如下两种方式:
1. 采用MyBatis内置的Cache机制。
2. 采用三方Cache框架, 比如EhCache, OSCache等等。

  

一、导包:基于ssm---》添加ehcache-core-2.4.4.jar  mybatis-ehcache-1.0.0.jar 这两个jar包(当前这两个版本一致时可以实现,我之前两个版本用其他的报错,反正就是要匹配得上) (slf4j-api-1.6.2.jar和
   slf4j-log4j12-1.6.2.jar也要

  二、文件目录 --新建ehcache.xml (目录如下)

mybatis 整合ehcache实现缓存_第1张图片

     
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">










maxElementsInMemory="10000" 
eternal="false" 
overflowToDisk="true"
timeToIdleSeconds="10"
timeToLiveSeconds="20"
diskPersistent="false"  
diskExpiryThreadIntervalSeconds="120"/>

maxElementsInMemory="1000"  
eternal="false"             
overflowToDisk="true"       
timeToIdleSeconds="10"      
timeToLiveSeconds="20"/> 
     







   三、 IUserMapper.xml 中添加下面(*mapper.xml想要哪些sql进行缓存就在相应的xml里面加)




   
   
   
  
   
   
   
 

四、测试类:
        @RequestMapping("findUserList")
public String findUserList(HttpServletRequest request, Model model) {
User user1 = (User) request.getSession().getAttribute("user");
List user = userService.findUserList(user1.getName());//第一次执行正常查询
System.out.println("----------------------------start");
List user22 = userService.findUserList(user1.getName());//第二次执行从缓存中获取数据(打印sql如下)
System.out.println("----------------------------end");
model.addAttribute("userList", user);
return "user/userInformation";
}
五、执行该方法之后:第一次正常查询,第二次获取缓存内数据
mybatis 整合ehcache实现缓存_第2张图片

    如上就成功。

六、有个问题,

用spring管理 ehcache 和 直接在 mapper.xml 文件里面使用ehcache有什么区别么?

整合完ssm框架以后 加上 必要的ehcaceh的jar包,然后直接在整个usermapper.xml 文件中增加 一行

 就可以直接使用ehcache了

可是   还可以在 applicationContext.xml文件中 增加 ehcaceh 管理

然后 使用@cacheable,spring 的粒度更细,这两者有哪些不一样的地方?

 

你可能感兴趣的:(ehcache缓存)