用了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) |