Hibernate 之 二级缓存
二级缓存也称为进程级的缓存或SessionFactory级的缓存,二级缓存可以被所有的session共享,换句话说就是一级缓存可以用二级缓存里的内容.二级缓存的生命周期和SessionFactory(重量级,一个数据库一个SessionFactory)的生命周期一致,SessionFactory可以管理二级缓存.二级缓存在Hibernate中有自己的实现叫做HashTable,但是不建议用它进行商用,可以用来进行测试.Hibernate的二级缓存有专门的缓存策略提供商(Cache Providers),例如EHCache,OSCache等.在这篇文章中我们主要介绍一下Hibernate二级缓存EHCache的用法.vcnQsZLDLyP3Su9Ov1MK/2sbfZWV5eXkobm90xf5lbmRlZGZvcnByb2R1Y3Rpb251OmUpb3JnLmjWuWVybmF0ZS5jYWNoZS5IYXNodGFibGVDYWNoZXByb3Y6ZGVyRUhDYWNoZU9TQ2Fj1rdvcmcuaGli0tFybmF0ZS5jYWNo0tGjrkVoY2FjschQcm92aWTS0XJvcmcuYta5ZXJuYXRlLmMuY2hlo661xENhY2hlUHJvdmxkZXJvcmcuaNa5ZXJuYXRlLmMuY2hlLnMuYXK95KGjY2hlUHJvdmlkZXJUs+VlbbDNVU9yecvvZXRub3J5o6zJvXNrbWVtb3J5o67OpXNrY8LvZXJlZNbZbaGwxt9DYUJ0KWPQrXRlcmVkw65ttKiho2Nhc3QpLHllcyhjbHVzdGVyZWS8+zA1NVRyZWVDYWNoZW9yZy5oyLBlcm5hdGUuY2FjaGWjrtbaZWVDYWNoZVByb3a5pGRlcsbftrxhY29vbtLReWVzKHLToc7lY7XEoaNuKXllcyhjZm9ja3PDrmNyZXEp" src="/2013/0115/20130115034710173.png" />二级缓存EHCache的配置和使用.*将ehcache.xml文件拷贝到src下(在Hibernate3\etc\ehcache.xml路进行.从hibernate相关的例子中找配置文件)如下图:默认配置.<defaultCachemaxElementsInMemory="10000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"overflowToDisk="true"/>配置的解释如下:<!--缺省配置 可以对类进行单独配置--><!--最大对象数目 --><!--是否过期 --><!--多长时间没有被访问 --><!--如果超过限制,则放入磁盘中 -->可以进行单独配置<cache name="sampleCache2"maxElementsInMemory="1000"eternal="true"timeToIdleSeconds="0"timeToLiveSeconds="0"overflowToDisk="false"/>*在hibernate.cfg.xml文件中加入缓存产品提供商<propertyname="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>* 启用二级缓存,这也是它的默认配置,在hibernate.cfg.xml配置文件中进行启动二级缓存配置.<propertyname="hibernate.cache.use_second_level_cache">true</property>*指定哪些实体类使用二级缓存可以在映射文件中采用<cache>标签指定或在hibernate.cfg.xml文件中统一指定注意使用的策略,通常采用read-only和read-write.例如在配置文件中统一进行配置.(此处笔者将对Student类进行配置)<class-cacheusage="read-only" class="com.tgb.hibernate.Student"/>*以上便完成了EHCache的基本配置,接下来便是在具体的代码中运用例如在两个Session中发Load查询,因为我们配置了二级缓存,所以在第二次Load的过程中不在发出查询语句,而是直接从二级缓存中获取数据.测试代码如下:[java]/*** 二级缓存测试代码**/public class CacheTest extends TestCase {/*** 开启二级缓存* 在两个session中发load查询*/public void testCache() {Session session = null;try {//获取sessionsession = HibernateUtils.getSession();//开启事务session.beginTransaction();//第一次用load查询id为1的学生Student student = (Student)session.load(Student.class, 1);System.out.println("student.name=" + student.getName());//提交session.getTransaction().commit();}catch(Exception e) {e.printStackTrace();session.getTransaction().rollback();}finally {HibernateUtils.closeSession(session);}try {session = HibernateUtils.getSession();session.beginTransaction();第二次用load查询id为1的学生Student student = (Student)session.load(Student.class, 1);//不会发出查询语句,因为配置二级缓存,session可以共享二级缓存中的数据//二级缓存是进程级的缓存System.out.println("student.name=" + student.getName());session.getTransaction().commit();}catch(Exception e) {e.printStackTrace();session.getTransaction().rollback();}finally {HibernateUtils.closeSession(session);}}}补充:软件开发 , Java ,
上一个:java远程方法调用(RMI)
下一个:log4j 使用说明总结
- 更多JAVA疑问解答:
- java怎么在线读取ftp服务器上的文件内容
- 关于程序员的职业规划
- HTML和JSP矛盾吗?
- java小程序如何打包?
- java怎么split路径文件名?
- jsp+javaBean中Column 'ordersPrice' specified twice的错误
- Java TCP/IP Socket网络编程系列
- 大家来讨论一下我到底该用什么好?Swing 还是 JavaFX
- 关于Hibernate实体自身多对一的抓取问题
- 关于apache2+tomcat群集出现的问题
- spring 获取上下文问题
- SSH 导入导出excel 谁有这块的资料吗?
- Ext TreePanel 刷新问题
- springmvc 加载一个jsp页面执行多个方法 报404
- checkbox数组action怎么向页面传值