首先要有一个搭建好的ssm框架,笔者使用的是基于maven搭建的ssm框架。

加入springmvc缓存:

  1. 导入相关依赖包:

     <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>4.3.7.RELEASE</version>
     </dependency>
     <dependency>
         <groupId>net.sf.ehcache</groupId>
         <artifactId>ehcache</artifactId>
         <version>1.6.2</version>
     </dependency>
  2. 加入ehcache的配置文件ehcache.xml:(注意文件的位置!)
     <?xml version="1.0" encoding="UTF-8"?>
     <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
         updateCheck="false">  
    
         <diskStore path="java.io.tmpdir" />  
    
         <defaultCache eternal="false"
             maxElementsInMemory="1000"
             overflowToDisk="false"
             diskPersistent="false"
             timeToIdleSeconds="0"
             timeToLiveSeconds="600"
             memoryStoreEvictionPolicy="LFU" />  
    
         <cache name="myCache"
             eternal="false"
             maxElementsInMemory="500"
             overflowToDisk="false"
             diskPersistent="false"
             timeToIdleSeconds="0"
             timeToLiveSeconds="300"
             memoryStoreEvictionPolicy="LFU" />  
    
     </ehcache>
  3. 在springmvc的配置文件中开启缓存功能:(注意引入命名空间,不然会报错!)
  4.  <!-- 启用缓存注解功能 -->
     <cache:annotation-driven cache-manager="cacheManager" />
     <!-- spring提供的基于的ehcache实现的缓存管理器 -->
     <bean id="cacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
         <property name="configLocation" value="classpath:ehcache.xml" />
     </bean>
     <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
         <property name="cacheManager" ref="cacheManagerFactory" />
     </bean>
  5. 将缓存注解写在了service层:(控制层代码省略,就是调用一下service层)
     @Cacheable(value = "myCache", key = "'UserService.findById'")
     @Override
     public List<User> findById(int id) {
         System.out.println("*************************************************我是缓存方法*************************************************");
         List<User> list = userMapper.findById(id);
         return list;
     }

    value对应的是ehcache.xml文件里的name,相当于一个缓存空间。key最好在全局是唯一的,这里使用的类名+方法名,因为后面可能会根据这个值对特定的缓存进行清理。

  6. 测试:(jsp代码省略,就是调用一下controller层,然后controller层调用上面加过缓存注解的service层方法)

第一次调用,进入该方法进行了相关程序:

第二次调用,没有进入该方法,直接从缓存中输出了结果:

在更新的时候,需要将该缓存清除掉:

 @CacheEvict(value = "myCache", key = "'UserService.findById'")
 @Override
 public void removeCache() {
     System.out.println("*************************************************移除了缓存*************************************************");
 }

再次查询的时候就会重新进入该方法进行查询。

加入springmvc缓存:

mybatis的一级缓存是默认开启的,二级缓存有一个最简单的开启方法,在每个Mapper.xml文件里加入一个<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true" />即可(注意要放到mapper标签里)

测试:(此处测试时先屏蔽掉了springmvc的缓存)

 @Override
 public List<User> findById(int id) {
     System.out.println("*************************************************我是缓存方法*************************************************");
     List<User> list = userMapper.findById(id);
     return list;
 }

第一次访问,对数据库进行了查询:

第二次访问,没有对数据库进行查询,直接使用了缓存:

源码下载:http://files.cnblogs.com/files/ImNemo/ssm-cache.rar

springmvc缓存和mybatis缓存的更多相关文章

  1. Mybatis:缓存,动态SQL,注解SQL以及动态标签使用

    1 转义字符 字符 转义 描述 < < 小于 <= <= 小于等于 > > 大于 >= >= 大于等于 <> <> 不等于 &a ...

  2. mybatis缓存机制

    目录 mybatis缓存机制 Executor和缓存 一级缓存 小结 二级缓存 小结 mybatis缓存机制 mybatis支持一.二级缓存来提高查询效率,能够正确的使用缓存的前提是熟悉mybatis ...

  3. MyBatis(十):Mybatis缓存的重要内容

    本文是按照狂神说的教学视频学习的笔记,强力推荐,教学深入浅出一遍就懂!b站搜索狂神说或点击下面链接 https://space.bilibili.com/95256449?spm_id_from=33 ...

  4. Mybatis 一级缓存和二级缓存的使用

    目录 Mybatis缓存 一级缓存 二级缓存 缓存原理 Mybatis缓存 官方文档:https://mybatis.org/mybatis-3/zh/sqlmap-xml.html#cache My ...

  5. MyBatis 缓存机制(十三)

    什么是缓存 缓存就是内存中的一个对象,用于对数据库查询结果的保存,用于减少与数据库的交互次数从而降低数据库的压力,进而提高响应速度. MyBatis 缓存机制原理 Mybatis 缓存机制原理是将第一 ...

  6. [原创]关于mybatis中一级缓存和二级缓存的简单介绍

    关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...

  7. MyBatis 延迟加载,一级缓存,二级缓存设置

    什么是延迟加载 resultMap中的association和collection标签具有延迟加载的功能. 延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息.使用关联信息时再去加载关联信息 ...

  8. mybatis缓存

    mybatis缓存http://www.cnblogs.com/QQParadise/articles/5109633.htmlhttp://www.mamicode.com/info-detail- ...

  9. 【Mybatis框架】查询缓存(二级缓存)

    继上一篇博客,我们讲述了mybatis的一级缓存,接下来,我们来学习一下mybatis的二级缓存 博客链接地址: http://blog.csdn.NET/liweizhong193516/artic ...

随机推荐

  1. javascript的闭包与一次重构的感受

    有没有这么一个场景,你的一个动作需要在所有异步方法执行完毕后,再进行操作?然而你对异步方法何时执行完毕感到困扰,只能在每个方法中写回调,在回调中重复劳动? 偶然的,想起了之前经理讲过的闭包的概念,偶然 ...

  2. WebStorm里启动electron项目

    WebStorm里启动electron项目,其实很简单 一.第一步打开下面的窗口 二.然后输入electron .,然后敲下 回车键,然后等会项目界面就会出现了. PS:electron 和 点之间有 ...

  3. 性能测试分享:Jmeter多机协作原理

    性能测试分享:Jmeter多机协作原理   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:90 ...

  4. Selenium测试专项一班隆重开班

    Selenium测试专项一班隆重开班 应广大测试技术人员要求,以及企业技术需求.Selenium提前一周开课了,只针对合作的每家企业提供1-2个参训名额.预计培训60人次.但报名人数却远远超出我们预期 ...

  5. 老李分享:DBA

    poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-845052 ...

  6. Android™ 1.5 android.R.drawable Icon Resources

    图标一览表: http://www.darshancomputing.com/android/1.5-drawables.html 官  方  API: http://developer.androi ...

  7. C++命名空间的解释 【转】

    使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突.在C++中,变量.函数和类都是大量存在的.如果没有命名空间,这些变量.函数.类的名称将都存在于全局命名空间中,会导致很多冲突.比如,如果我 ...

  8. iOS UITableViewCell点击时子视图背景透明的解决方法

    在做iOS项目的开发中,UITableView控件的应用十分广泛.在进行自定义UITableViewCell时,经常遇到这样的问题:在UITableViewCell上面添加了一个有背景颜色的子视图,当 ...

  9. Latex 公式在线可视化编辑器

    寻觅 最近的一个demo需要用到Latex公式在线编辑器,从搜索引擎一般会得到类似http://latex.codecogs.com/eqneditor/editor.php的结果,这个编辑器的问题在 ...

  10. stm32通过电调带动电机(可按键调速)

    这几天在做32通过电调带动电机的实验,上网一查,发现这方面的资料很少,经过自己的亲自实践,总结出以下经验,供大家参考. 论坛上也有很多人说自己在做,但是都遇到了同样的瓶颈.我想他们大多是pwm的频率和 ...