Chinaunix首页 | 论坛 | 博客
  • 博客访问: 902675
  • 博文数量: 215
  • 博客积分: 10062
  • 博客等级: 上将
  • 技术积分: 2235
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-01 13:21
文章分类

全部博文(215)

文章存档

2012年(1)

2011年(24)

2009年(16)

2008年(91)

2007年(83)

我的朋友

分类: Java

2009-03-19 11:19:50

用了hibernate一年多时间,连hibernate缓存都没有用,郁闷。。今天抽空学习了一下,总体感觉还是蛮好的。。。
 
hibernate一级缓存是不需要我们手动设置的,他已经自动的实现了。。
在我们取出了对象数组之后,我们不关闭session 使用get/load 方法它就会先到缓存中已主键ID来查找对象是否存在,否则就会在连接一次数据库来查找。
 
我们今天重点讲解Hibernate二级缓存的适用:(使用EhCacheProvider)
1.建立ehcache.xml
eg:
 
 
     maxElementsInMemory="10000"
    eternal="false"
    timeToIdleSeconds="10000"
    timeToLiveSeconds="10000"
    overflowToDisk="true"
 />
      maxElementsInMemory="10000"
    eternal="false"
    timeToIdleSeconds="10000"
    timeToLiveSeconds="10000"
    overflowToDisk="true"
 />
 
 
2.修改hibernate.cfg.xml

          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "">

 

  
  
  
   org.hibernate.dialect.MySQLDialect
  

  
   jdbc:mysql://localhost:3306/db
  

  root
  root
  
   com.mysql.jdbc.Driver
  
  
  
                org.hibernate.cache.EhCacheProvider
   
 
        
   true 
      
  true
  

  
  
  
    
 
 
3.修改DomainBean.hbm.xml
 
"">


   
       
         
       
           
           
       

       
   

 
4.下面写测试程序就基本完成
 public List find(final String query) {
  Session sn = null;
  List list = null;
  try {
   sn = HibernateSessionFactory.getSession();
   // Transaction ts = sn.beginTransaction();
   list = sn.createQuery(query).list();
   // ts.commit();
  } catch (Exception ex) {
   logger.error("find() error:" + ex.getMessage(), ex);
  } finally {
   HibernateSessionFactory.closeSession();
  }
  return list;
 }
----可以明显看到SQl语句已经打出来了-----
 public Object get(final Class entity, final Serializable id) {
  Session sn = null;
  Object obj = null;
  try {
   sn = HibernateSessionFactory.getSession();
   obj = sn.get(entity, id);
  } catch (Exception ex) {
   logger.error("get() error:" + ex.getMessage(), ex);
  } finally {
   HibernateSessionFactory.closeSession();
  }
  return obj;
 }
----每个看到SQL语句的打出------(可见适用get的时候没有连接数据库进行查询,而是直接在缓存中查找)
 
阅读(539) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~