- 浏览: 1989054 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (509)
- JavaEE (122)
- Oracle数据库 (29)
- JavaScript (37)
- SAP (5)
- MySql数据库 (7)
- JavaSE (4)
- Ajax (1)
- jQuery (13)
- SSH框架 (36)
- Web Service (10)
- JSF框架 (2)
- JBPM (0)
- ireport报表 (2)
- ibatis (5)
- Hibernate (31)
- JSP (11)
- Tomcat 服务器 (20)
- Other (19)
- JavaWeb (4)
- Maven (11)
- OSWorkFlow (10)
- HTML (13)
- Exception汇总 (7)
- SVN (2)
- 笑话 (1)
- JSTL (1)
- WebSphere Message Broker (13)
- ANT命令 (3)
- Liunx (12)
- Struts2 (26)
- Eclipse (6)
- DOS (3)
- Flex (11)
- WebSphere (1)
- 开发常用工具 (3)
- Junit (2)
- EJB (4)
- Struts1.2 (2)
- Jboss (1)
- Android (2)
- Java框架源码解析 (1)
- Spring (4)
- MyBatis (6)
- SpringMVC (4)
- Jetty (2)
- 数据库表设计 (1)
- SSO (4)
最新评论
-
贝塔ZQ:
也可以试试PageOffice插件,觉得更简单点
Jxl操作Excel设置背景、字体颜色、对齐方式、列的宽度 -
jia1208:
...
Could not publish server configuration for Tomcat v6.0 Server at localhost. -
u011274527:
赞
java.io.EOFException java.io.ObjectInputStream$PeekInputStream.readFully 错误 -
旭旭小牛啦:
怎么没哟了,继续赛
jQuery 选择器 -
wzw3919:
100行会报空指针
Java 解压缩zip文件
我们知道
hibernate的session提供了一级缓存,每个session,对同一个id进行两次load,不会发送两条sql给数据库,但是session关闭的时候,一级缓存就失效了,所以一级缓存默认Hibernate就提供了。
二级缓存是SessionFactory级别的全局缓存,它底下可以使用不同的缓存类库,比如ehcache、oscache等,需要设置hibernate.cache.provider_class,我们这里用ehcache,在2.1中就是
hibernate.cache.provider_class=net.sf.hibernate.cache.EhCacheProvider
如果使用查询缓存,加上
hibernate.cache.use_query_cache=true
缓存可以简单的看成一个Map,通过key在缓存里面找value。
下面开始配置Hibernate.cfg.xml文件,在该文件中加入二级缓存的配置:
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="connection.username">root</property> <property name="connection.password">mysql</property> <property name="connection.url">jdbc:mysql://localhost/mysqldemo</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <!--自动在数据库中生成表 <property name="hibernate.hbm2ddl.auto">create</property> --> <!-- 开启二级缓存 --> <property name="hibernate.cache.use_second_level_cache">true</property> <!-- 设置缓存提供者 --> <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> <!-- 查询缓存 --> <property name="hibernate.cache.use_query_cache">true</property> <!-- 映射文件 --> <mapping resource="pack/java/hibernate/mapping/User.hbm.xml"/> <!-- 指定哪些实体需要使用二级缓存,usage属性指定缓存的策略 --> <class-cache usage="read-only" class="pack.java.hibernate.pojo.User"/> </session-factory> </hibernate-configuration>
在Hibernate.cfg.xml文件中开启了二级缓存,查询缓存和设置缓存的提供者,以及指定了那些实体需要使用二级缓存。
如果你使用的二级缓存实现是ehcache的话,需要配置ehcache.xml
内容如下:
<echcache> <diskStore path="java.io.tmpdir"/> <!-- 默认缓存配置; maxElementslnMemory 属性指定缓存中最多可以放多少个对象 eternal 属性指定缓存是否永久有效 timeToldleSeconds 属性指定缓存多久未被使用便清理掉 timeToLiveSecods 属性指定缓存的生命长度 diskPersistent 属性指定缓存是否被持久化硬盘中,保存路径由标签指定。 --> <defaultCache maxElementslnMemory="10000" eternal="false" overflowToDisk="true" timeToldleSeconds="120" timeToLiveSecods="120" diskPersistent="false" /> </echcache>
然后,在建立一个User.hbm.xml映射文件:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="pack.java.hibernate.pojo.User" table="User"> <!-- 使用这种方式也可以应用缓存 <cache usage="read-only"/> --> <id name="uid" column="UID" type="java.lang.Integer"> <generator class="identity"></generator> </id> <property name="uname" column="UNAME"></property> <property name="age" column="AGE"></property> <property name="address" column="ADDRESS"></property> <property name="sex" type="java.lang.Boolean"> <column name="SEX" sql-type="tinyint"></column> </property> <property name="remark" column="REMARK"></property> </class> </hibernate-mapping>
定义个Model取名为User:
public class User implements Serializable{ private static final long serialVersionUID = 1628733968156346447L; private Integer uid; private String uname; private Integer age; private String address; private Boolean sex; private String remark; //getter和setter方式省略 }
然后就是建立一个测试类:
/** * 查询所有用户信息; */ @SuppressWarnings("unchecked") public List<User> queryUser() { // TODO Auto-generated method stub if(session==null){ session = getSession(); } query = session.createQuery("from "+User.class.getName()+" u where u.uname in('100','101','102','103','104','105')"); query.setCacheable(true); query.setFirstResult((0)*1000).setMaxResults(1000); List<User> list = query.list(); for(User user:list){ System.out.println("~~~~~~~~"+user.getUid()+","+user.getUname()+","+user.getSex()+","+user.getAddress()); } session.close(); if(!session.isOpen()){ session = getSession(); } User user = (User) session.get(User.class, 29145); query.setCacheable(true); System.out.println("~~~~~~~~"+user.getUid()+","+user.getUname()+","+user.getSex()+","+user.getAddress()); session.close(); return list; }
在结果中Hibernate只会去查询一次数据库..然后把结果放到二级缓存中..第二次查询时,如果查询的结果在二级缓存中,就直接从二级缓存中取.如果二级缓存中不存在.则会到数据库中取出.
这里说明一点.网上有些人说使用get的方式不会在二级缓存中取..
其实不是..get 和 load方法都会在二级缓存中取数据.
发表评论
-
大型互联网服务集成平台:springmvc+mybatis+restfull+JMS+webservice+bootstrap
2015-04-12 23:36 22SpringMVC + Mybatis + SpringS ... -
Spring中二级缓存的配置
2011-12-18 20:40 22291.首先,在spring的hibernate配置里(app ... -
Hibernate 配置文件提示
2011-12-11 16:03 10301.这个则是hibernate.cfg.xml文件的头信息.. ... -
Hibernate 生成策略属性
2011-10-17 14:01 1010"assigned" 主键由外部程序负责生 ... -
Exception in thread "main" java.lang.NoClassDefFoundError: javax/transaction/Syn
2011-10-16 18:37 2463Exception in thread "main& ... -
Hibernate缓存的分类
2011-10-16 11:25 1028Hibernate缓存分类: Session ... -
在Hibernate中使用日期函数获取数据库时间
2011-10-04 20:13 1670在Hibernate中使用日期函数获取数据库时间 ... -
Hibernate关联映射-one to one主键双向关联
2011-09-23 01:11 1315这次,继续上一次的实例。 记录1对1 主键双向关联. ... -
Exception in thread "main" org.hibernate.id.IdentifierGenerationException: attem
2011-09-23 00:46 2061今天在做Hibernate中1多1双向关联映射的实例时, ... -
Hibernate关联映射-one to one 外键双向关联.
2011-09-22 00:28 1168说明:双向一对一,是一对多的特例,只需要在多的一方设置成 ... -
Hibernate关联映射-many to many 外键单向关联.
2011-09-20 01:18 1450多对多的实例很多,这里说一个比较简单的例子,而且还是单向 ... -
Hibernate关联映射-many to one 外键单向关联
2011-09-18 00:25 1955多个人可以对应一个地址,也就是所谓的多对一关系,many to ... -
Hibernate关联映射-one to to 主键单向关联
2011-09-17 23:23 1046这次介绍 还是以Person 和 Address 为例. ... -
Hibernate关联映射-one to many外键单向关联
2011-09-15 01:14 4586以下是说明,1对多 单向外键关联 的实例.同样以person ... -
Hibernate关联映射-one to one单向外键关联
2011-09-13 22:00 1648Hibernate的关联关系很多,也非常的复杂. 常见的有 ... -
org.hibernate.TransientObjectException: object references an unsaved transient i
2011-09-12 19:02 1483org.hibernate.TransientObjectEx ... -
org.hibernate.PropertyAccessException: Exception occurred inside getter of pack.
2011-09-12 18:54 6124报如下,异常是因为,在Person对象中.设置的属性类型 ... -
org.hibernate.MappingException: could not instantiate id generator
2011-09-10 14:32 2473在搭建Hibernate的环境时, ... -
配置hibernate.properties 或 hibernate.cfg.xml 文件时,在配置JDBC连接参数时,要配置数据库方言
2011-09-10 13:04 1931各数据库的方言 (配置 hibernate.cfg.xml 时 ... -
java.sql.SQLException: ORA-01747: user.table.column, table.column 或列说明无效
2011-08-17 11:53 7189今天,使用Hibernate框架,做映射时,添加数据时, ...
相关推荐
以EhCache为例,我们需要在项目中引入ehcache-core或ehcache的依赖,并在Hibernate配置文件(hibernate.cfg.xml或persistence.xml)中启用二级缓存,添加如下配置: ```xml <property name="hibernate.cache.use_...
在Java企业级开发中,Spring和Hibernate是两个非常...3. **配置Spring**:在Spring的配置文件(如`applicationContext.xml`)中,配置Hibernate SessionFactory,并注入二级缓存配置。以下是一个配置示例: ```xml ...
然后,在`hibernate.cfg.xml`配置文件中,指定缓存提供者,并开启二级缓存: ```xml <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory <property name="...
2. **配置**:在 Hibernate 的配置文件(如 hibernate.cfg.xml)中启用二级缓存,并指定使用的缓存提供商。例如,如果使用 Ehcache,需要设置 `<property name="hibernate.cache.use_second_level_cache">true...
二级缓存可以通过设置不同的并发访问策略来解决并发问题,如事务型、读写型或非严格读写型,以适应不同场景下的需求。 持久化层的缓存范围决定了缓存的生命周期和访问权限。事务范围的缓存最安全,但只限于当前事务...
Hibernate二级缓存是一种提高应用程序性能的技术,它将数据存储在SessionFactory级别的缓存中,使得数据可以在不同的Session之间共享。这与一级缓存(Session级别)不同,一级缓存仅存在于单个Session生命周期内,当...
以下是一个简单的二级缓存配置示例: ```xml <hibernate-configuration> <!-- 配置缓存插件 --> <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory ...
这里它被用作Hibernate二级缓存的实现方式,这意味着当数据首次从数据库中读取后,会被存储在memcached中,后续请求可以直接从缓存中获取,避免了频繁的数据库交互,从而提高了系统的响应速度。 **知识点详解:** ...
通过以上步骤,我们就成功地在Spring Boot 2.1.4.RELEASE项目中配置了使用Redis作为Hibernate二级缓存的环境。这将显著提升数据库查询效率,减少对数据库的压力,尤其在高并发场景下,效果尤为明显。记得在实际生产...
在这个"hibernate二级缓存实例"中,我们将深入探讨二级缓存的原理、配置以及在实际项目中的应用。 首先,我们需要了解一级缓存和二级缓存的区别。一级缓存是Session级别的,每个Session都有自己的一级缓存,用于...
Hibernate EhCache 二级缓存配置是 Hibernate 框架中的一种缓存机制,它可以提高应用程序的性能和效率。下面是关于 Hibernate EhCache 二级缓存配置的详细知识点: 一、简介 EhCache 是 Hibernate 的另一个项目,...
- **配置复杂**:二级缓存需要在Hibernate配置文件中指定缓存提供商,并对实体类进行配置,以便它们能够参与缓存。 - **缓存策略**:二级缓存支持不同的缓存策略,如读写策略、只读策略、定时刷新策略等,可以根据...
2. 在 Hibernate 配置文件中启用二级缓存。 3. 在实体类上添加 `@Cacheable` 注解或者在映射文件中配置 `<cache>` 元素。 4. 配置实体类的缓存策略,例如使用 `@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)` ...
配置Ehcache作为二级缓存提供商,需要在Hibernate的配置文件中设置`hibernate.cache.provider_class`为`net.sf.hibernate.cache.EhCacheProvider`。如果启用查询缓存,还需添加`hibernate.cache.use_query_cache=...
通过这个"Spring4+Hibernate4二级缓存实例源码",你可以学习到如何在实际项目中结合Spring和Hibernate实现二级缓存,提高应用的运行效率。同时,深入理解缓存的工作原理和最佳实践,对于优化系统的性能和架构有着...
在Spring框架中管理SessionFactory时,可以在配置文件中添加相应的bean定义,指定数据源、Hibernate属性以及二级缓存的相关设置。例如,`hibernate.cache.use_query_cache`属性可以开启查询缓存,进一步优化性能。 ...
综上所述,通过学习`hibernate二级缓存示例源码`,我们可以了解到如何在实际项目中配置和使用Hibernate二级缓存,从而提升系统的性能。在实际应用中,应结合具体场景选择合适的缓存策略,以达到最佳的性能优化效果。
本压缩包提供的资源应该包含了实现Hibernate二级缓存所需的关键组件和库文件。 一级缓存是Hibernate Session内的缓存,它是每个Session实例独有的,当Session关闭时,一级缓存中的数据也会被清除。而二级缓存则是一...
在本配置中,Hibernate版本为5.1.3,支持JPA规范,提供了二级缓存功能,提高了数据访问性能。 4. **二级缓存(Ehcache)**: Ehcache是Hibernate的一个可选二级缓存插件,用于存储数据库查询结果,减少对数据库的...
而二级缓存则需要在配置文件中明确指定,可以针对单个类或集合粒度进行配置。对于读多写少的实体,启用二级缓存能显著提升性能。 一级缓存的管理主要由Session负责,通过evict()和clear()方法控制。evict()用于移除...