Hibernate缓存管理
来源:互联网 发布:软件测试吉安 编辑:程序博客网 时间:2024/04/30 18:30
Hibernate缓存分类:
1、一级缓存(session缓存,又称作事物缓存): Hibernate内置的,不能卸除。
缓存范围:缓存只能被当前的Session对象访问。缓存的生命周期依赖于Session的生命周期,当Session被关闭后,缓存也就结束生命周期。
2、二级缓存(SessionFactory缓存,又称作应用缓存):
缓存范围:缓存被应用范围内的所有session共享,不同的session可以共享。这些session可能是并发的访问缓存,所以必须对缓存进行更新,它的生命周期依赖于应用的生命周期。
如何使用二级缓存:
(1)、在HIbernate配置文件Hibernate.cfg.xml中:
//设置二级缓存插件EHCache的provider类。
<property name="cache.provider_class"> org.hibernate.cache.EhCacheProvider</property>
//使用二级缓存 ,以缓存使用find(),list().....................等方法查询
<property name="cache.use_second_level_cache">true</property>
(2)、在项目的src目录下创建EHCache的配置文件ehcache.xml
<?xml version='1.0' encoding='UTF-8'?>
<ehcache>
<diskStore path="java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="10000"<!-- 缓存对象的最大数目 -->
eternal="false" <!-- 是否为永不过期,一般设置为false(过期) -->
timeToIdleSeconds="120"<!--对象处于空闲状态的最多秒数 -->
timeToLiveSeconds="120"<!--对象处于缓存的最多秒数 -->
overflowToDisk="true"<!--内存溢出时,是否写入硬盘 -->
/>
</ehcache>
(3)、在需要缓存的持久化对象的映射文件中配置相应的二级缓存策略。
例如:User.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="ied.houserent.pojo.User" table="user" catalog="houserent">
<cache usage="read-write"/>
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="50" not-null="true" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="128" not-null="true" />
</property>
<property name="telephone" type="java.lang.String">
<column name="telephone" length="15" />
</property>
<property name="username" type="java.lang.String">
<column name="username" length="50" />
</property>
<property name="isadmin" type="java.lang.Integer">
<column name="isadmin" />
</property>
<set name="houses" inverse="true">
<key>
<column name="user_id" not-null="true" />
</key>
<one-to-many class="ied.houserent.pojo.House" />
</set>
</class>
<query name="findByName">
<![CDATA[
from User u where u.name=:name
]]>
</query>
<sql-query name="findByNameBySQL">
<![CDATA[
select * from user where name=?
]]>
</sql-query>
</hibernate-mapping>
(4)、测试类:
package ied.houserent.test;
import org.hibernate.Session;
import ied.houserent.dao.HibernateSessionFactory;
import ied.houserent.pojo.User;
public class TestCache {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Session session=HibernateSessionFactory.getSession();
User user1=(User) session.load(User.class, 1);
System.out.println(user1.getName());
session.close();
Session session2=HibernateSessionFactory.getSession();
User user2=(User) session2.load(User.class, 1);
System.out.println(user2.getName());
session2.close();
}
}
5、控制台输出:
Hibernate:
select
user0_.id as id3_0_,
user0_.name as name3_0_,
user0_.password as password3_0_,
user0_.telephone as telephone3_0_,
user0_.username as username3_0_,
user0_.isadmin as isadmin3_0_
from
houserent.user user0_
where
user0_.id=?
xx
xx
- Hibernate缓存管理
- Hibernate缓存管理
- Hibernate缓存管理
- Hibernate缓存管理
- Hibernate缓存管理
- Hibernate缓存管理
- Hibernate缓存管理
- Hibernate缓存管理
- Hibernate 缓存管理
- Hibernate缓存管理
- Hibernate缓存管理
- Hibernate缓存管理
- Hibernate缓存管理
- Hibernate 缓存管理
- Hibernate缓存管理(转)
- Hibernate 缓存管理
- Hibernate缓存管理
- Hibernate缓存管理
- Emacs是神的编辑器,而Vim是编辑器之神
- Win7下CHM文档乱码解决
- sed不能删除特定行字符开头的行
- JavaScript中的style.display 属性
- document.write, innerHTML
- Hibernate缓存管理
- UITableView的分页的加载
- top
- poj2141 字符输入
- 一部Emacs的历史,等于一部计算机史,一部世界黑客史
- UML序列图
- HDU 4526.威威猫系列故事——拼车记
- 驱动模块Makefile解析
- Oracle创建序列及循环自增取值问题