0 0

请教一个关于Spring Data 和 JPA2.0的缓存的问题5

	@Override
	@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value ="true") })
	public List<T> findAll(Pager page) {
		org.springframework.data.domain.Page<T> springDataPage = jpaRepository.findAll(PageUtils.createPageable(page));
		PageUtils.injectPageProperties(page, springDataPage);
		return springDataPage.getContent();

代码如上,第二次查找的时候只从缓存里面获取,对于那些关联关系的对象没有发sql语句了,可是还是需要发送一条sql语句获取这个查找的list,而且是获取了所有的字段,请教下,这里的缓存策略是怎样的,如果根据ID进行缓存,进行查找的时候可不可以直接查找ID字段就可以了,然后再从数据库里面获取。

用的ehcache缓存。
2014年5月17日 11:23

1个答案 按时间排序 按投票排序

0 0

可以的, 通过set/get方法处理缓存
CacheManager.set(xxxx), CacheManager.get(xxx)

更多内容详见:
http://www.oschina.net/code/snippet_12_1574

import java.io.Serializable;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 缓存助手
 */
public class CacheManager {
	
	private final static Log log = LogFactory.getLog(CacheManager.class);
	private static CacheProvider provider;

	static {
		initCacheProvider("my.cache.EhCacheProvider");
	}
	
	private static void initCacheProvider(String prv_name){
		try{
			CacheManager.provider = (CacheProvider)Class.forName(prv_name).newInstance();
			CacheManager.provider.start();
			log.info("Using CacheProvider : " + provider.getClass().getName());
		}catch(Exception e){
			log.fatal("Unabled to initialize cache provider:" + prv_name + ", using ehcache default.", e);
			CacheManager.provider = new EhCacheProvider();
		}
	}

	private final static Cache _GetCache(String cache_name, boolean autoCreate) {
		if(provider == null){
			provider = new EhCacheProvider();
		}
		return provider.buildCache(cache_name, autoCreate);
	}

	/**
	 * 获取缓存中的数据
	 * @param name
	 * @param key
	 * @return
	 */
	public final static Object get(String name, Serializable key){
		//System.out.println("GET1 => " + name+":"+key);
		if(name!=null && key != null)
			return _GetCache(name, true).get(key);
		return null;
	}
	
	/**
	 * 获取缓存中的数据
	 * @param <T>
	 * @param resultClass
	 * @param name
	 * @param key
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public final static <T> T get(Class<T> resultClass, String name, Serializable key){
		//System.out.println("GET2 => " + name+":"+key);
		if(name!=null && key != null)
			return (T)_GetCache(name, true).get(key);
		return null;
	}
	
	/**
	 * 写入缓存
	 * @param name
	 * @param key
	 * @param value
	 */
	public final static void set(String name, Serializable key, Serializable value){
		//System.out.println("SET => " + name+":"+key+"="+value);
		if(name!=null && key != null && value!=null)
			_GetCache(name, true).put(key, value);		
	}
	
	/**
	 * 清除缓冲中的某个数据
	 * @param name
	 * @param key
	 */
	public final static void evict(String name, Serializable key){
		if(name!=null && key != null)
			_GetCache(name, true).remove(key);		
	}

	/**
	 * 清除缓冲中的某个数据
	 * @param name
	 * @param key
	 */
	public final static void justEvict(String name, Serializable key){
		if(name!=null && key != null){
			Cache cache = _GetCache(name, false);
			if(cache != null)
				cache.remove(key);
		}
	}

}

2014年5月18日 18:15

相关推荐

    Spring Data JPA的优点和难点.pdf

    Spring Data JPA是Spring生态中的一个强大ORM框架,它极大地提高了Java开发者在处理数据库操作时的效率。Spring Data JPA的主要优点在于其高度的开发效率、成熟的语法结构以及与Spring框架的紧密集成。 1. **开发...

    Spring Data JPA Demo

    Spring Data JPA 是一个强大的框架,它简化了与Java Persistence API (JPA) 的交互,JPA 是Java 开发者用来管理和持久化应用程序数据的一种标准。在这个“Spring Data JPA Demo”项目中,我们将深入探讨如何利用...

    手动创建 SpringMvc +SpringDataJpa+Hibernate+ freemarker mavenProject+ 环境切换 webDemo

    在本项目中,我们主要探讨如何手动构建一个基于SpringMVC、Spring Data JPA、Hibernate以及FreeMarker模板引擎的Maven工程,同时实现环境切换功能。这个基础框架为日常开发工作提供了必要的支持。 首先,SpringMVC...

    Spring Data JPA中文文档[1.4.3].zip

    Spring Data JPA是Java开发中的一个关键框架,它简化了与关系型数据库的交互,特别是基于Java Persistence API (JPA)。这个框架是Spring生态系统的组成部分,为开发者提供了声明式数据访问的方式,允许通过简单的...

    Spring Data JPA从入门到精通

    Spring Data JPA是Spring Framework的一个模块,它简化了Java Persistence API(JPA)的使用,使开发者能够以更简洁的方式与数据库进行交互。以下将详细阐述Spring Data JPA的关键知识点。 1. **Spring Boot基础**...

    Spring+SpringMVC+SpringDataJPA+Hibernate

    在本文中,我们将深入探讨"Spring+SpringMVC+SpringDataJPA+Hibernate"这个集成框架,这是一个在Java开发中广泛使用的强大组合,用于构建高效、可扩展的企业级应用程序。 首先,Spring是一个全面的Java应用框架,它...

    spring-data Jpa Jar包

    Spring Data JPA是Spring框架的一个模块,专门用于简化Java Persistence API (JPA)的使用,它使得数据库操作变得更加便捷和高效。JPA是Java中的一种ORM(对象关系映射)规范,允许开发者以面向对象的方式处理数据库...

    spring-data-JPA帮助文档

    Spring Data JPA是Spring框架的一个重要模块,它简化了Java Persistence API (JPA)的使用,使得数据库操作变得更加便捷和高效。这篇详细的帮助文档旨在深入探讨Spring Data JPA的新特性和最佳实践,帮助开发者充分...

    spring4.2,spring mvc,spring data,jpa,hibernate的程序构架

    总的来说,这个程序构架展示了如何利用Spring 4.2、Spring MVC、Spring Data JPA和Hibernate来构建一个高效、可维护的企业级Web应用。通过合理利用这些技术,开发者可以更加专注于业务逻辑,而不是底层的数据访问...

    spring data jpa中文文档

    Spring Data JPA是Spring框架的一个模块,主要目的是简化Java企业级应用程序中数据访问层的开发。这个框架提供了对Java Persistence API (JPA) 的高级抽象,使得开发者可以更高效地与数据库进行交互,无需编写大量的...

    Spring Data JPA

    **Spring Data JPA** 是一个由Spring框架提供的重要模块,它简化了Java应用程序与数据库之间的交互,特别是基于JPA(Java Persistence API)的持久层操作。Spring Data JPA旨在通过提供自动化Repository接口实现、...

    spring data jpa参考文档

    Spring Data JPA 是一个基于 Spring 框架的数据访问抽象层,它简化了 Java 应用程序与关系型数据库之间的交互。该版本为 1.7.2.RELEASE,发布日期为 2015 年 1 月 29 日,主要贡献者包括 Oliver Gierke、Thomas ...

    spring-data-jpa-1.3.0.RELEASE.zip

    Spring Data JPA 是 Spring 框架的一个重要模块,它旨在简化数据库访问,并提供了一种一致的方式来实现对数据存储的查询操作。在 Spring Data JPA 1.3.0.RELEASE 版本中,我们可以深入探讨其核心特性、改进与优势。 ...

    SpringData+JPA

    SpringData JPA支持多个数据源配置,方便构建微服务架构或数据分片场景。 10. **错误处理与调试** 在开发过程中,理解JPA抛出的异常类型,如PersistenceException、EntityExistsException等,有助于快速定位和...

    spring-boot-starter-data-jpa 的二级缓存

    总之,Spring Boot通过starter-data-jpa模块和Hibernate、Ehcache整合,为我们提供了一个强大的工具集,可以有效地实现二级缓存机制,优化应用性能,减少数据库压力。开发者需要掌握这些知识点,以确保在实际的项目...

    spring-data-jpa-1.1.0.RELEASE

    Spring Data JPA 1.1.0.RELEASE版本是这个库的一个早期版本,但仍然包含了丰富的功能和改进,使得开发人员可以更高效地处理数据持久化问题。 首先,让我们理解Spring Data JPA的核心概念。Spring Data JPA通过...

    Spring+SpringMVC+SpringData+JPA+hibernate+shiro

    在这个"Spring+SpringMVC+SpringData+JPA+Hibernate+Shiro"的组合中,我们涉及到了Spring生态系统的多个核心组件,以及两个重要的持久层技术和一个安全框架。下面将逐一详细介绍这些技术及其整合方式。 1. **Spring...

    Spring Data JPA讲义_Java高薪训练营1

    Spring Data JPA 是一个基于 Java Persistence API(JPA)的数据访问技术,提供了一个简洁的方式来访问数据库。它提供了一个抽象层,允许开发者使用 Java 语言来访问数据库,而不需要编写 SQL 语句。 Spring Data ...

    Spring Data JPA数据库操作教程.zip

    "JPA + SpringData 操作数据库原来可以这么简单 ---- 深入了解 JPA - 2 - crawl+ - 博客园.url"、"JPA + SpringData 操作数据库 ---- 深入了解 SpringData - crawl+ - 博客园.url"和"JPA + SpringData 操作数据库...

Global site tag (gtag.js) - Google Analytics