`

hibernate4的实现二级缓存ehcach

 
阅读更多

1.先导入Jar包

hibernate二级缓存的jar包

ehcache-core-2.4.3.jar

hibernate-ehcache-4.2.7.Final.jar

slf4j-api-1.6.1.jar

 

 @Transient注解 写在ehcache.xml里<!-- 指定的PO对象的缓存规则 --> 的po里。

 

 配置启动二级缓存

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
            http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
	<persistence-unit name="mysql" transaction-type="RESOURCE_LOCAL">
		<!--可选 -->
		<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
		<!--ORM产品厂商的特定属性 -->
		<properties>
			<!--配置Hibernate方言 -->
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
			<!--配置数据库驱动 -->
			<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
			<!--配置数据库用户名 -->
			<property name="hibernate.connection.username" value="root" />
			<!--配置数据库密码 -->
			<property name="hibernate.connection.password" value="" />
			<!--配置数据库url -->
			<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8" />
			<!--设置外连接抓取树的最大深度 -->
			<property name="hibernate.max_fetch_depth" value="3" />
			<!-- 显示SQL语句 -->
			<property name="hibernate.show_sql" value="true" />
			<!-- 格式化SQL语句 -->
			<property name="hibernate.format_sql" value="false" />
			 <!-- 提取数据深度 -->
			<property name="hibernate.max_fetch_depth" value="3" />
			 <!-- 一个批提取多少条 -->
			<property name="hibernate.jdbc.batch_size" value="10" />
 			 <!-- 正常语句提取多少条 -->
 			<property name="hibernate.jdbc.fetch_size" value="50" />   
            <!--启用二级缓存-->
			<property name="hibernate.cache.use_second_level_cache" value="true" />
            <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory" />
            <property name="hibernate.cache.use_query_cache" value="true" />
            <!-- 指定缓存配置文件位置 -->  
			<property name="hibernate.cache.provider_configuration_file_resource_path" value="config/cache/ehcache.xml"></property>
			<!-- 强制Hibernate以更人性化的格式将数据存入二级缓存 -->  
			<property name="hibernate.cache.use_structured_entries" value="true"></property>
			<!--自动输出schema创建DDL语句 -->
			<property name="hibernate.hbm2ddl.auto" value="update" />    
		</properties>
	</persistence-unit>
</persistence>

 

 

2.在src下创建ehcache.xml

 

 

<?xml version="1.0" encoding="UTF-8"?>  
<ehcache>
<!-- 二级缓存 -->  
	<!-- 默认cache:如果没有对应的特定区域的缓存,就使用默认缓存 -->  
	<!--缓存最大个数-->
<defaultCache maxElementsInMemory="10000"  
		<!--对象是否永久有效,一但设置了,timeout将不起作用。-->
		eternal="false"  
		<!--设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。-->
		timeToIdleSeconds="300"   
		<!--设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。-->
		timeToLiveSeconds="600"  
		<!--当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。-->
		overflowToDisk="false"/>  
                
	<!-- 指定ResourcePO对象的缓存规则 -->  
	<resourcepo name="com.sysmaster.po.ResourcePO"  
		eternal="false"  
		maxElementsInMemory="100"  
		timeToIdleSeconds="1200"  
		timeToLiveSeconds="1200"  
		overflowToDisk="false">  
	</resourcepo> 
</ehcache>  

Resource.java

package com.sysmaster.po;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

@Entity
@Table(name="T_Resource")
public class ResourcePO 
{
	//资源编号 
	private int rid;
	//资源标题
	private String name;
	//资源图标
	private String icon;
	//操作标识,用于指明主操作区按钮的操作特征(傎为:addPage,editPage,del,search)
	private String opt;
	
	//url地址
	private String url;
	//排序规则
	private int seq;
	//备注
	private String remark;
	
	//资源类型
	private int rtid;
	
	//增加资源类型
	private ResourceTypePO resourceType;
	
	//级联子资源
	private List<ResourcePO> resourceList;
	
	//父项资源
	private ResourcePO presource;
	
	public ResourcePO()
	{
		resourceList = new ArrayList<ResourcePO>();
	}
	
	@Id
	@GeneratedValue
	public int getRid() {
		return rid;
	}
	public void setRid(int rid) {
		this.rid = rid;
	}
	@Column(length=20)
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Column(length=30)
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	@Column(length=20)
	public String getIcon() {
		return icon;
	}
	public void setIcon(String icon) {
		this.icon = icon;
	}
	 
	public int getSeq() {
		return seq;
	}

	public void setSeq(int seq) {
		this.seq = seq;
	}

	public String getOpt() {
		return opt;
	}

	public void setOpt(String opt) {
		this.opt = opt;
	}

	public String getRemark() {
		return remark;
	}

	public void setRemark(String remark) {
		this.remark = remark;
	}

	@ManyToOne(cascade={CascadeType.PERSIST,CascadeType.REFRESH})
	@JoinColumn(name="rtid")
	public ResourceTypePO getResourceType() {
		return resourceType;
	}
	public void setResourceType(ResourceTypePO resourceType) {
		this.resourceType = resourceType;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="prid")
	public ResourcePO getPresource() {
		return presource;
	}

	public void setPresource(ResourcePO presource) {
		this.presource = presource;
	}

	@OneToMany(cascade=CascadeType.ALL,mappedBy="presource")
	public List<ResourcePO> getResourceList() {
		return resourceList;
	}

	public void setResourceList(List<ResourcePO> resourceList) {
		this.resourceList = resourceList;
	}

	@Transient
	public int getRtid() {
		return rtid;
	}

	public void setRtid(int rtid) {
		this.rtid = rtid;
	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics