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&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 的一级缓存和二级缓存都是为了提高数据访问效率,但它们在范围和并发控制方面有所不同。一级缓存是事务级别的,保证了数据的强一致性,而二级缓存提供了更多的灵活性,可以跨事务共享,但需要...
这个标题表明我们将探讨一个具体的应用示例,即如何在Hibernate4框架中实现实现二级缓存,并且提供了源码供参考。Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库。...
在Java的持久化框架Hibernate4中,二级缓存是一个重要的性能优化工具,它能够显著提升数据访问速度,减少对数据库的直接操作。二级缓存主要分为查询缓存和集合缓存,通过缓存中间结果,避免了多次重复的数据库查询。...
这里我们指定了EhCache作为二级缓存的实现。 2. **配置实体缓存策略**:针对每个需要缓存的实体,我们需要在对应的映射文件(.hbm.xml)或者使用注解方式声明缓存策略。例如,我们可以使用`@Cacheable`和`@Cache`...
二级缓存主要由第三方缓存提供者如Ehcache、Infinispan等实现,它们将数据存储在内存或磁盘中,以便于快速访问。 1. **引入依赖**:在项目中添加所需的缓存提供者库。例如,如果选择Ehcache,需要在`pom.xml`或`...
**hibernate一级缓存、二级缓存和查询缓存** 在Java的持久化框架Hibernate中,缓存机制是提高应用程序性能的关键要素。缓存能够减少数据库的访问次数,提高数据读取速度,并且在一定程度上降低了系统的负载。本文将...
本篇将深入探讨Hibernate的一级缓存和二级缓存,以及查询缓存的配置和使用。 ### 一级缓存 一级缓存是Hibernate默认提供的缓存,它是Session级别的,每个Hibernate Session都有一个私有的、本地的一级缓存。当我们...
在本文中,我们将深入探讨如何在Spring Boot 2.1.4.RELEASE项目中结合JPA(Java Persistence API)和Hibernate实现Redis作为二级缓存。首先,我们需要理解这些技术的基本概念。 Spring Boot 是一个用于简化Spring...
Ehcache是Hibernate的一个可选二级缓存插件,用于存储数据库查询结果,减少对数据库的直接访问。当相同的数据再次被请求时,可以从缓存中快速获取,提高系统响应速度。在不使用缓存的情况下,可以通过配置关闭。 5...
这个"hibernate5.1二级缓存包"应该包含了用于实现二级缓存的相关组件和配置。 二级缓存是相对于一级缓存(Session 缓存)而言的,一级缓存是每个 Hibernate Session 内部的缓存,而二级缓存则是在 SessionFactory ...
Hibernate二级缓存是一种提高应用程序性能的技术,它将数据存储在SessionFactory级别的缓存中,使得数据可以在不同的Session之间共享。这与一级缓存(Session级别)不同,一级缓存仅存在于单个Session生命周期内,当...
通过这个"Spring4+Hibernate4二级缓存实例源码",你可以学习到如何在实际项目中结合Spring和Hibernate实现二级缓存,提高应用的运行效率。同时,深入理解缓存的工作原理和最佳实践,对于优化系统的性能和架构有着...
在Java的持久化框架Hibernate中,二级缓存是提高数据访问效率的重要机制。它是一种全局共享的、跨会话的数据存储区域,旨在减少对数据库的直接访问,从而降低系统负载,提升性能。在这个"hibernate二级缓存实例"中,...
在 Hibernate 中,二级缓存和查询缓存是提高应用性能的重要机制。下面将详细介绍如何开启并理解这两个缓存机制。 ### 1. 一级缓存与二级缓存 #### 1.1 一级缓存 一级缓存是 Hibernate 内置的 Session 缓存,它是每...
ehcache 二级缓存 配置使用的jar包 配置如下: <!-- 启用二级缓存 --> <property name="hibernate.cache.use_second_level_cache">true <!-- 查询的二级缓存配置 --> <property name="hibernate....
本篇文章将深入探讨Hibernate的二级缓存机制,以及如何进行一级缓存与二级缓存的同步,同时还会介绍二级缓存的配置文件设置。 一级缓存是Hibernate默认提供的缓存,每个SessionFactory实例都有一个一级缓存。当对象...
标题“Hibernate一级缓存和二级缓存”指的是Hibernate框架中的两种缓存机制,它们是提高数据访问性能的关键要素。一级缓存是Session级别的,而二级缓存是SessionFactory级别的,两者在数据库操作中起到了重要的作用...
Hibernate 二级缓存是针对SessionFactory级别的全局缓存,与一级缓存(Session级别)不同,一级缓存只在单个Session生命周期内有效。二级缓存则允许不同Session之间共享数据,提高了数据访问效率,减少了对数据库的...
本文将深入探讨Hibernate二级缓存的基本概念、工作原理及如何通过示例源码实现。 ### 1. 二级缓存概述 Hibernate的一级缓存是Session级别的,它自动管理对象的状态,提供瞬时、持久化和脱管状态之间的转换。然而,...
本篇将详细讲解如何配置Memcached作为Hibernate 4的二级缓存,以及相关的知识点。 首先,我们需要了解什么是Memcached。Memcached是一款高性能、分布式内存对象缓存系统,它用于存储中间结果或临时数据,以减少对...