• spring缓存笔记 半注解版


    注解的方式使用缓存:

    第一步:导入jar

    1spring-context-support-4.2.4.RELEASE.jar

    提供了平台缓存管理器相关class

    引入:

    (2)导入spring-framework-3.0.2.RELEASE-dependencies et.sourceforge.ehcachecom.springsource.net.sf.ehcache1.6.2com.springsource.net.sf.ehcache-1.6.2.jar

    第二步:引入ehcache.xml文件

     

    第三步:引入头信息(和上面一样)

    <beans xmlns="http://www.springframework.org/schema/beans"
    
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    
           xmlns:p="http://www.springframework.org/schema/p"
    
           xmlns:context="http://www.springframework.org/schema/context"
    
           xmlns:aop="http://www.springframework.org/schema/aop"
    
           xmlns:tx="http://www.springframework.org/schema/tx"
    
           xmlns:cache="http://www.springframework.org/schema/cache"
    
           xsi:schemaLocation="http://www.springframework.org/schema/beans
    
                               http://www.springframework.org/schema/beans/spring-beans.xsd
    
                               http://www.springframework.org/schema/context
    
                               http://www.springframework.org/schema/context/spring-context.xsd
    
                               http://www.springframework.org/schema/aop
    
                               http://www.springframework.org/schema/aop/spring-aop.xsd
    
                               http://www.springframework.org/schema/tx
    
                               http://www.springframework.org/schema/tx/spring-tx.xsd
    
                               http://www.springframework.org/schema/cache
    
                               http://www.springframework.org/schema/cache/spring-cache.xsd">

    第四步:编写applicationContext.xml,使用注解方式:

    <!-- 使用注解的方式配置缓存 -->
    
    <!-- 第一步:定义ehcache的对象EhCacheManager:spring提供了工厂,专业来new对象 -->
    
    <bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
    
    <!-- 注入ehcache的核心配置文件
    
    通过源代码发现,这里即使不配置,默认就到classpath中寻找ehcache.xml
    
     -->
    
    <property name="configLocation" value="classpath:ehcache.xml"/>
    
    </bean>
    
    <!-- 第二步:具体平台缓存管理器:整合ehcache的实现,需要导入jar -->
    
    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
    
    <!-- 注入ehcache的缓存对象 -->
    
    <property name="cacheManager" ref="ehCacheManager"/>
    
    </bean>
    
    <!-- 第三步:配置缓存注解驱动 -->
    
    <cache:annotation-driven cache-manager="cacheManager"/>

    第五步:使用缓存的bean的类型的方法上,加两个注解:

    在cn.itcast.ssh.service包中的类BookServiceImpl.java中添加缓存的注解

    //图书业务层
    
    @Service("bookService")
    
    @Transactional(readOnly=true)//事务(类级别的事务,一般定义成只读,方法级别的事务定义成可写)
    
    public class BookServiceImpl implements IBookService{
    
    //注入dao层
    
    @Autowired
    
    private IBookDao bookDao;
    
     
    
    //保存图书
    
    @Transactional(readOnly=false)//事务(方法级别的事务,覆盖类级别的事务)
    
    @CacheEvict(value="bookCache",allEntries=true)
    
    public void saveBook(Book book){
    
    //调用dao层
    
    bookDao.save(book);
    
    }
    
     
    
    //查询:复杂条件查询,根据书名模糊查询
    
    @Cacheable(value="bookCache")//value:echache缓存区域的名字
    
    public List<Book> findBookListByNameLike(String name){
    
    //1.qbn
    
    return bookDao.findByNamedQuery("Book.findBookListByNameLike", "%"+name+"%");
    
    
    //2.qbc
    
    // DetachedCriteria criteria =DetachedCriteria.forClass(Book.class);//root对象类型
    
    // criteria.add(Restrictions.like("name",  "%"+name+"%"));
    
    // return bookDao.findByCriteria(criteria);
    
      }
    
    } 

    第六步:测试代码:在cn.itcast.ssh.test包中创建BookServiceTest进行测试

    @RunWith(SpringJUnit4ClassRunner.class)
    
    @ContextConfiguration(locations="classpath:applicationContext.xml")
    
    public class BookServiceTest {
    
    //注入service
    
    @Autowired
    
    private IBookService bookService;
    
     
    @Test
    
    public void testSaveBook() {
    
    Book book = new Book();
    
    book.setName("葵花宝典233");
    
    book.setPrice(998d);
    
    bookService.saveBook(book);
    
    }
    
     
    @Test
    
    public void testFindBookListByNameLike() {
    
    List<Book> list = bookService.findBookListByNameLike("星");
    
    System.out.println(list);
    
    List<Book> list2 = bookService.findBookListByNameLike("星");
    
    System.out.println(list2);
    
    Book book = new Book();
    
    book.setName("葵花宝典2");
    
    book.setPrice(998d);
    
    bookService.saveBook(book);
    
    List<Book> list3 = bookService.findBookListByNameLike("星");
    
    System.out.println(list3);
    
    List<Book> list4 = bookService.findBookListByNameLike("星");
    
    System.out.println(list4);
    
      }
    
    }

    查看测试结果,控制台中输出:

    第一次查询数据库,第二次从缓存中查询!

    小结:推荐是用注解,简单,xml配置麻烦。

  • 相关阅读:
    《精通.NET互操作1.2》C# PInvoke使用c++dll
    WPF的dataGrid基本用法
    C#中$的用法
    ASP.NET WebApi 实现Token验证
    Ajax请求WebAPI传递多参数的方法
    ajax调用ASP.NET MVC控制器传递参数
    js子窗口调用父窗口函数并传递对象给父窗口的方法
    H5本地存储和本地数据库
    非对称加密RSA的C#实现
    在Unity3D项目中接入ShareSDK实现安卓平台微信分享功能(可使用ShareSDK默认UI或自定义UI)
  • 原文地址:https://www.cnblogs.com/best-lwj/p/9278499.html
Copyright © 2020-2023  润新知