- 浏览: 1633444 次
- 性别:
- 来自: 长春
文章分类
- 全部博客 (309)
- ext (19)
- web (13)
- PHP (19)
- 互联网新闻 (3)
- oracle (3)
- Mootools (1)
- FLEX (3)
- 人在职场 (2)
- hibernate (24)
- spring2 (1)
- J2SE (24)
- WEB_UI (14)
- 其它 (11)
- Log4J (1)
- iText (10)
- SQL (11)
- 设计模式 (3)
- lucene (6)
- 开源项目 (2)
- javascript (20)
- 软件&破解补丁 (48)
- Quartz (2)
- 解决方案 (1)
- 工作存档 (2)
- JAVA对文件操作 (2)
- C&C#&VC (1)
- struts2 (3)
- 版本控制 (2)
- 软考基础 (23)
- JBPM (2)
- velocity (4)
- javamail (3)
- HttpClient (9)
- 虚拟化技术 (2)
- 报表 (3)
- ibatis (5)
- Spring (4)
- 信用卡 (0)
- 芒果钱包 (0)
- 养卡 (0)
最新评论
-
a601962168:
...
通过JAVA与串口(RS232)通信实例 -
olive009:
...
Adobe Acrobat 9 Pro & Pro Extended 中文版/英文版 下载及破解补丁 -
overshit:
api更新了,一加filter就Callback filter ...
深入浅出CGlib-打造无入侵的类代理 -
u010778233:
写得很不错,已经用起来了,谢谢
将jdbc结果集转换成对象列表 -
924060929:
我想找就是要这个功能!!!!!!!!
velocity基础教程--2自定义ResourceLoader实现字符模板
大家都了解对于信息的展示应用中解决对数据库的频繁访问主要有两种手段。
其一是生成静态文件进行存储,其二是采用数据换成技术。
hibernate + ehcache 就是采用第二种方式,也就是对数据的首次访问时取得读取数据,并应用缓存配置的吧取得的数据进行缓存,
以备下次读取时直接从缓存数据中读取,无需再次访问数据库。
hibernate 3.2
echache 1.2.3
eclipse 3.3
EhCache是一个纯Java程序,可以在Hibernate中作为一个插件引入。它具有运行速度快、结构简单、占用内存小、很小的依赖性、支持多CPU服务器、文档齐全等特点。
至于hibernate的使用这里不做介绍
用于EhCache是以插件形式加载的所以只需在hibernate.cfg.xml配置插入相关配置即可
其中
是对EhCache以及hibernate使用缓存的配置。
接下来在src根目录中创建缓存策略文件
创建一个用于测试的数据表
接下来我们需要对实体映射文件中加入缓存配置
以Test对象为例(相关dao 忽略)
<cache
usage="transactional|read-write|nonstrict-read-write|read-only"/>
ehcache 暂不支持transactional。
read-only:无需修改, 那么就可以对其进行只读缓存,注意,在此策略下,如果直接修改数据库,即使能够看到前台显示效果,但是将对象修改至cache中会报error,cache不会发生作用。另:删除记录会报错,因为不能在read-only模式的对象从cache中删除。
read-write:需要更新数据,那么使用读/写缓存 比较合适,前提:数据库不可以为serializable transaction isolation level(序列化事务隔离级别)
nonstrict-read-write:只偶尔需要更新数据(也就是说,两个事务同时更新同一记录的情况很不常见),也不需要十分严格的事务隔离,那么比较适合使用非严格读/写缓存策略。
下面我们进行测试
看一看控制台的输出
我们可以看到第二次查询的时候并没有从数据库中查询。
Java开发Q群:46176507
其一是生成静态文件进行存储,其二是采用数据换成技术。
hibernate + ehcache 就是采用第二种方式,也就是对数据的首次访问时取得读取数据,并应用缓存配置的吧取得的数据进行缓存,
以备下次读取时直接从缓存数据中读取,无需再次访问数据库。
hibernate 3.2
echache 1.2.3
eclipse 3.3
EhCache是一个纯Java程序,可以在Hibernate中作为一个插件引入。它具有运行速度快、结构简单、占用内存小、很小的依赖性、支持多CPU服务器、文档齐全等特点。
至于hibernate的使用这里不做介绍
用于EhCache是以插件形式加载的所以只需在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"> <!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration> <session-factory> <property name="cache.provider_class"> org.hibernate.cache.EhCacheProvider </property> <property name="hibernate.cache.use_query_cache">true</property> <property name="connection.driver_class"> com.mysql.jdbc.Driver </property> <!-- 指定连接数据库的url,hibernate连接的数据库名 --> <property name="connection.url"> jdbc:mysql://localhost/test </property> <!-- 数据库用户名 --> <property name="connection.username">root</property> <!-- 数据库密码 --> <property name="connection.password">root</property> <!--用c3p0连接池连接所允许的最大连接数--> <property name="hibernate.c3p0.max_size">20</property> <!-- c3p0所允许的最少连接数 --> <property name="hibernate.c3p0.min_size">1</property> <!-- 指定连接池连接失效的时间 --> <property name="hibernate.c3p0.timeout">50</property> <!-- 指定连接池缓存最大的存储多少个statement --> <property name="hibernate.c3p0.max_statements">100</property> <!-- hibernate.c3p0.timeout表示连接对象多长时间应该被销毁, 注意,是”应该“,但是谁来销毁它呢,需要一个线程按照hibernate.c3p0.idle_test_period 设定的时间间隔去自动校验这些链接对象并销毁timeout的 --> <property name="hibernate.c3p0.idle_test_period">30</property> <!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 --> <property name="hibernate.c3p0.acquire_increment">2</property> <!-- 连接数据库的数据库方言 org.hibernate.dialect.MySQLDialect--> <property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <!-- 每次都验证连接是否可用 --> <property name="hibernate.c3p0.validate">true</property> <property name="show_sql">true</property> <mapping resource="test/hibernate/Test.hbm.xml" /> </session-factory> </hibernate-configuration>
其中
<property name="cache.provider_class"> org.hibernate.cache.EhCacheProvider </property> <property name="hibernate.cache.use_query_cache">true</property>
是对EhCache以及hibernate使用缓存的配置。
接下来在src根目录中创建缓存策略文件
<?xml version="1.0" encoding="UTF-8"?> <ehcache> <diskStore path="ehcache"/> //缓存目录 <defaultCache maxElementsInMemory="100000" //缓存中允许创建的最大对象数 eternal="false" //缓存中对象是否为永久的 overflowToDisk="true" //是否启用磁盘缓存 timeToIdleSeconds="1500" //对象在它过期前的空闲时间 timeToLiveSeconds="1500" //对象在它过期前的生存时间 /> </ehcache>
创建一个用于测试的数据表
CREATE TABLE `test` ( `name1` varchar(255) NOT NULL, `name2` varchar(255) default NULL, `datetime` datetime default NULL, PRIMARY KEY (`name1`) )
接下来我们需要对实体映射文件中加入缓存配置
以Test对象为例(相关dao 忽略)
<?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"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="test.hibernate.Test" table="test" catalog="admintools"> <cache usage="read-write"/> <id name="name1" type="string"> <column name="name1" /> <generator class="assigned" /> </id> <property name="name2" type="string"> <column name="name2" /> </property> <property name="datetime" type="timestamp"> <column name="datetime" length="0" /> </property> </class> </hibernate-mapping>
<cache
usage="transactional|read-write|nonstrict-read-write|read-only"/>
ehcache 暂不支持transactional。
read-only:无需修改, 那么就可以对其进行只读缓存,注意,在此策略下,如果直接修改数据库,即使能够看到前台显示效果,但是将对象修改至cache中会报error,cache不会发生作用。另:删除记录会报错,因为不能在read-only模式的对象从cache中删除。
read-write:需要更新数据,那么使用读/写缓存 比较合适,前提:数据库不可以为serializable transaction isolation level(序列化事务隔离级别)
nonstrict-read-write:只偶尔需要更新数据(也就是说,两个事务同时更新同一记录的情况很不常见),也不需要十分严格的事务隔离,那么比较适合使用非严格读/写缓存策略。
下面我们进行测试
Test test = new Test(); test.setName1("name1_2"); test.setName2("name2_2"); Session session = HibernateSessionFactory.getSession(); Transaction tr = session.beginTransaction(); try{ session.saveOrUpdate(test); tr.commit(); }catch(HibernateException e){ System.out.println(e.getMessages()); tr.rollback(); }finally{ session.close(); } System.out.println("-----------"); session = HibernateSessionFactory.getSession(); tr = session.beginTransaction(); try{ Test tt = (Test) session.get("test.hibernate.Test", "name1_2"); System.out.println(tt.getName1()+" "+tt.getName2()); }catch(HibernateException e){ e.printStackTrace(); System.out.println(e.getMessages()); tr.rollback(); }finally{ session.close(); } System.out.println("-----"); session = HibernateSessionFactory.getSession(); tr = session.beginTransaction(); try{ Test tt = (Test) session.get("test.hibernate.Test", "name1_2"); System.out.println(tt.getName1()+" "+tt.getName2()); }catch(HibernateException e){ e.printStackTrace(); System.out.println(e.getMessages()); tr.rollback(); }finally{ session.close(); }
看一看控制台的输出
Hibernate: select test_.name1, test_.name2 as name2_0_, test_.datetime as datetime0_ from admintools.test test_ where test_.name1=? ----------- Hibernate: select test0_.name1 as name1_0_0_, test0_.name2 as name2_0_0_, test0_.datetime as datetime0_0_ from admintools.test test0_ where test0_.name1=? name1_2 name2_2 ----- name1_2 name2_2
我们可以看到第二次查询的时候并没有从数据库中查询。
Java开发Q群:46176507
发表评论
-
基于hibernate的泛型Dao框架
2009-06-10 16:05 16528这个东西是一年前弄的 ... -
hibernate的session.flush
2008-07-30 21:32 1670测试session.flush 1、session在什么情况 ... -
hibernate在单端关联上的lazy策略
2008-07-30 21:30 1437hibernate在单端关联上的lazy策略,<one- ... -
hibernate在集合上的lazy策略
2008-07-30 21:29 1332hibernate在集合上的lazy策略,可以取值true/f ... -
hibernate的lazy策略forClass
2008-07-30 21:26 1345lazy策略可以用在: * <class>标签上 ... -
hibernate多对多关联映射(双项关联)
2008-07-30 21:24 1506hibernate多对多关联映射(双项关联)user<- ... -
基本映射说明
2008-07-28 22:28 1453基本映射 类-->数据库表 普通属性-->表字 ... -
hibernate多对多关联映射(单项关联)
2008-07-28 22:27 1987hibernate多对多关联映射(单项关联)user---&g ... -
hibernate一对多关联映射(双向关联)
2008-07-28 22:25 4834hibernate一对多关联映射(双向关联)Classes&l ... -
hibernate一对多关联映射(单向关联)
2008-07-28 22:23 2159hibernate一对多关联映射(单向关联)Classes-- ... -
hibernate一对一唯一外键关联映射(双向关联)
2008-07-28 22:21 3972hibernate一对一唯一外键关联映射(双向关联)Perso ... -
hibernate一对一唯一外键关联映射(单项关联)
2008-07-28 22:19 2770hibernate一对一唯一外键关联映射(单项关联)Perso ... -
hibernate一对一主键关联映射(双项关联)
2008-07-28 22:17 1717hibernate一对一主键关联映射(双项关联)Person& ... -
hibernate一对一主键关联映射(单项关联)
2008-07-28 22:16 2777hibernate一对一主键关联映射(单项关联)Person- ... -
hibernate多对一关联映射
2008-07-28 22:14 1361关联映射的本质:将关联关系映射到数据库,关联关系在对象模型域中 ... -
测试实体对象的生命周期
2008-07-28 22:12 1366测试实体对象的生命周期 junit简介: *编写测试类xx ... -
hibernate_simple
2008-07-28 22:09 1420第一个hibernate项目 1.新建一个java项目 2 ... -
hibernate存入mysql乱码
2008-07-22 06:45 2821mysql数据库GBK,数据库中的表GBK,hibernate ... -
解决HIbernate分页问题获取表总行数的小Bug
2008-04-14 15:28 5669bug源 return (PageSupport) get ... -
通过hibernate去调用存储过程
2008-03-25 20:53 13921之前一直误以为用了hibernate之后就不可以使用存储过程了 ...
相关推荐
Hibernate+ehcache二级缓存技术 Hibernate+ehcache二级缓存技术
一级缓存是每个 Hibernate Session 的私有缓存,而二级缓存则可以跨 Session 共享,Ehcache 就是常见的二级缓存实现。 7. **事务管理**:在整合 Hibernate 和 Ehcache 时,必须注意事务管理,确保缓存与数据库的...
在提供的压缩包文件中,可能包含了Struts2、Hibernate和Ehcache的配置示例,以及相关的代码片段,用于演示如何集成和使用这些组件实现二级缓存。开发者可以通过分析这些文件,了解具体的实现细节,并在自己的项目中...
在这个项目中,我们将深入探讨如何将 Spring Boot 与 Hibernate、Shiro 和 Ehcache 结合,以实现一个高效且安全的 Web 应用。 **1. Spring Boot 与 Hibernate 集成** Hibernate 是一个强大的对象关系映射(ORM)...
1.通过google ehcache-spring-annotatios.jar自动注解方式实现整合Spring+Ehcache。 2.Action里通过struts2-spring-plugin.jar插件自动根据名字注入。 3.Ajax无刷新异步调用Struts2,返回Json数据,以用户注册为例。...
1. **Spring配置**:Spring的配置文件(如`applicationContext.xml`)会定义bean,包括数据源、SessionFactory(Hibernate)、缓存管理器(Ehcache)以及业务层和服务层的组件。通过依赖注入,Spring将这些组件装配...
spring+springmvc+hibernate+ehcache JavaWeb后台框架,不仅提高了开发程序的速度,且其中还是用到hibernate和ehcache缓存的使用,加快了程序运行的数据,该框架亲测好用。值得注意的是该种框架现在还算是用的比较多...
Hibernate提供了对缓存的支持,其中Ehcache是常用的二级缓存实现。在Hibernate中,一级缓存是Session级别的,每个Session内部都会有一个缓存,用于存储当前Session中的对象;二级缓存则是SessionFactory级别的,它...
在Java应用中,Ehcache用于存储频繁访问的数据,减少数据库的访问压力,提供缓存管理策略,如LRU(最近最少使用)算法。 4. **Shiro**:Apache Shiro是一个安全管理框架,它负责身份认证、授权(权限控制)、会话...
EhCache 是 Hibernate 的二级缓存技术之一,可以把查询出来的数据存储在内存或者磁盘,节省下次同样查询语句再次查询数据库,大幅减轻数据库压力。 EhCache 的使用注意点: 1. 当用 Hibernate 的方式修改表数据...
Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库操作,而Ehcache则是一种高效的分布式缓存系统,常用于提高数据访问速度和减轻数据库压力。 **Hibernate** 是一个流行的ORM框架,它允许开发者使用...
标题中的“DWZ+springMvc+hibernate+ehcache 简易的后台管理+即时通讯”揭示了这个项目采用的技术栈,包括前端框架、后端框架、持久层框架以及缓存管理工具。让我们逐一深入理解这些技术点: 1. **DWZ**:DWZ全称为...
标题 "Hibernate4 + Ehcache 例子" 暗示了我们将探讨如何在Java应用程序中集成Hibernate4 ORM框架和Ehcache缓存系统。这个例子可能是关于如何提高数据访问性能,通过缓存策略来减少数据库查询的次数。 描述中的链接...
例如,为了使用Ehcache,需要在Spring配置文件中添加Ehcache的相关bean,然后在Hibernate的SessionFactory配置中启用二级缓存。此外,还需要在Struts的Action中调用由Spring管理的业务服务,这些服务通常会利用...
3.Ehcache方法缓存及页面缓存。见applicationContext-cache.xml及web.xml的pageEhCacheFilter 4.MyBatis+Maven代码生成工具。见bin目录 5.作为项目或者技术研究的基础架构。必要的jar包依赖都已配置好,基本都采用较...
SpringMVC负责处理HTTP请求和视图展示,Spring作为核心框架进行依赖管理和事务控制,Hibernate则处理数据库操作,Shiro保障应用的安全性,而Ehcache则优化了数据访问性能。这些jar包的组合使得开发者能够快速地搭建...
3.Ehcache方法缓存及页面缓存。见applicationContext-cache.xml及web.xml的pageEhCacheFilter 4.MyBatis+Maven代码生成工具。见bin目录 5.作为项目或者技术研究的基础架构。必要的jar包依赖都已配置好,基本都采用较...
在本项目中,我们主要探讨的是一个基于Maven构建的Java Web应用,它整合了Spring 4、Hibernate 4、Apache Shiro以及Ehcache等多个关键框架,旨在实现用户角色菜单管理的功能。以下是对这些技术及其集成应用的详细...