`

hibernate一级缓存、二级缓存和查询缓存

 
阅读更多

一级缓存:

session级别的缓存。

二级缓存:

sessionFactory级别的缓存,可以跨越session存在。

loaditerator默认使用二级缓存。

list默认往二级缓存中加数据,但是查的时候不从二级缓存中取数据。

二级缓存适合放的对象:经常被访问、改动不大(不经常改动)、数量有限。

打开二级缓存:

1.hibernate.cfg.xml设置:(OSCache为例)

<!-- 默认就是true -->
<property name="cache.use_second_level_cache">true</property>
<property name="cache.provider_class">org.hibernate.cache.OSCacheProvider</property>

 

2.为实体类添加@Cache注解,比如:

package com.test.hiberenate.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

@Entity
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class Category {
	private int id;
	private String name;

	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

 

3. 缓存设置文件:oscache.properties

===================================================================

查询缓存:

如果query要用二级缓存,需要打开查询缓存

1.hibernate.cfg.xml设置:

<!-- 打开查询缓存(依赖于二级缓存),默认false -->
<property name="cache.use_query_cache">true</property>

 

2.设置sessionsetCachable(true)方法来指明使用二级缓存

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics