`

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;
	}
}

 

分享到:
评论

相关推荐

    hibernate一级缓存和二级缓存的区别与联系

    总结来说,Hibernate 的一级缓存和二级缓存都是为了提高数据访问效率,但它们在范围和并发控制方面有所不同。一级缓存是事务级别的,保证了数据的强一致性,而二级缓存提供了更多的灵活性,可以跨事务共享,但需要...

    Hibernate4二级缓存实例(源码)

    这个标题表明我们将探讨一个具体的应用示例,即如何在Hibernate4框架中实现实现二级缓存,并且提供了源码供参考。Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库。...

    hibernate4配置二级缓存

    在Java的持久化框架Hibernate4中,二级缓存是一个重要的性能优化工具,它能够显著提升数据访问速度,减少对数据库的直接操作。二级缓存主要分为查询缓存和集合缓存,通过缓存中间结果,避免了多次重复的数据库查询。...

    Spring集成的Hibernate配置二级缓存

    这里我们指定了EhCache作为二级缓存的实现。 2. **配置实体缓存策略**:针对每个需要缓存的实体,我们需要在对应的映射文件(.hbm.xml)或者使用注解方式声明缓存策略。例如,我们可以使用`@Cacheable`和`@Cache`...

    为Spring集成的Hibernate配置二级缓存

    二级缓存主要由第三方缓存提供者如Ehcache、Infinispan等实现,它们将数据存储在内存或磁盘中,以便于快速访问。 1. **引入依赖**:在项目中添加所需的缓存提供者库。例如,如果选择Ehcache,需要在`pom.xml`或`...

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

    **hibernate一级缓存、二级缓存和查询缓存** 在Java的持久化框架Hibernate中,缓存机制是提高应用程序性能的关键要素。缓存能够减少数据库的访问次数,提高数据读取速度,并且在一定程度上降低了系统的负载。本文将...

    hibernate一级和二级缓存配置与详解

    本篇将深入探讨Hibernate的一级缓存和二级缓存,以及查询缓存的配置和使用。 ### 一级缓存 一级缓存是Hibernate默认提供的缓存,它是Session级别的,每个Hibernate Session都有一个私有的、本地的一级缓存。当我们...

    springboot+jpa(hibernate配置redis为二级缓存) springboot2.1.4

    在本文中,我们将深入探讨如何在Spring Boot 2.1.4.RELEASE项目中结合JPA(Java Persistence API)和Hibernate实现Redis作为二级缓存。首先,我们需要理解这些技术的基本概念。 Spring Boot 是一个用于简化Spring...

    springmvc4+spring4+hibernate5.1.3+二级缓存ehcache+fastjson配置

    Ehcache是Hibernate的一个可选二级缓存插件,用于存储数据库查询结果,减少对数据库的直接访问。当相同的数据再次被请求时,可以从缓存中快速获取,提高系统响应速度。在不使用缓存的情况下,可以通过配置关闭。 5...

    hibernate5.1二级缓存包

    这个"hibernate5.1二级缓存包"应该包含了用于实现二级缓存的相关组件和配置。 二级缓存是相对于一级缓存(Session 缓存)而言的,一级缓存是每个 Hibernate Session 内部的缓存,而二级缓存则是在 SessionFactory ...

    Hibernate二级缓存

    Hibernate二级缓存是一种提高应用程序性能的技术,它将数据存储在SessionFactory级别的缓存中,使得数据可以在不同的Session之间共享。这与一级缓存(Session级别)不同,一级缓存仅存在于单个Session生命周期内,当...

    Spring4+Hibernate4二级缓存实例源码

    通过这个"Spring4+Hibernate4二级缓存实例源码",你可以学习到如何在实际项目中结合Spring和Hibernate实现二级缓存,提高应用的运行效率。同时,深入理解缓存的工作原理和最佳实践,对于优化系统的性能和架构有着...

    hibernate二级缓存实例

    在Java的持久化框架Hibernate中,二级缓存是提高数据访问效率的重要机制。它是一种全局共享的、跨会话的数据存储区域,旨在减少对数据库的直接访问,从而降低系统负载,提升性能。在这个"hibernate二级缓存实例"中,...

    hibernate开启二级缓存和查询缓存

    在 Hibernate 中,二级缓存和查询缓存是提高应用性能的重要机制。下面将详细介绍如何开启并理解这两个缓存机制。 ### 1. 一级缓存与二级缓存 #### 1.1 一级缓存 一级缓存是 Hibernate 内置的 Session 缓存,它是每...

    hibernate4.0使用二级缓存jar包

    ehcache 二级缓存 配置使用的jar包 配置如下: &lt;!-- 启用二级缓存 --&gt; &lt;property name="hibernate.cache.use_second_level_cache"&gt;true &lt;!-- 查询的二级缓存配置 --&gt; &lt;property name="hibernate....

    day37 05-HIbernate二级缓存:一级缓存更新同步到二级缓存及二级缓存配置文件

    本篇文章将深入探讨Hibernate的二级缓存机制,以及如何进行一级缓存与二级缓存的同步,同时还会介绍二级缓存的配置文件设置。 一级缓存是Hibernate默认提供的缓存,每个SessionFactory实例都有一个一级缓存。当对象...

    Hibernate一级缓存和二级缓存

    标题“Hibernate一级缓存和二级缓存”指的是Hibernate框架中的两种缓存机制,它们是提高数据访问性能的关键要素。一级缓存是Session级别的,而二级缓存是SessionFactory级别的,两者在数据库操作中起到了重要的作用...

    hibernate 二级缓存详解

    Hibernate 二级缓存是针对SessionFactory级别的全局缓存,与一级缓存(Session级别)不同,一级缓存只在单个Session生命周期内有效。二级缓存则允许不同Session之间共享数据,提高了数据访问效率,减少了对数据库的...

    hibernate二级缓存示例源码

    本文将深入探讨Hibernate二级缓存的基本概念、工作原理及如何通过示例源码实现。 ### 1. 二级缓存概述 Hibernate的一级缓存是Session级别的,它自动管理对象的状态,提供瞬时、持久化和脱管状态之间的转换。然而,...

    配置memecached作hibernate4的二级缓存

    本篇将详细讲解如何配置Memcached作为Hibernate 4的二级缓存,以及相关的知识点。 首先,我们需要了解什么是Memcached。Memcached是一款高性能、分布式内存对象缓存系统,它用于存储中间结果或临时数据,以减少对...

Global site tag (gtag.js) - Google Analytics