后来想了想,有可能是因为hibernate的版本不一样吧,忘了在这说了。谢谢xujunJ2EE同学提醒。暂时没有时间去测试3.0的版本了。下面的内容是在hibernate3.2下测试的
3.load方法可以充分利用内部缓存和二级缓存的现有数据,而get方法则仅仅在内部缓存中进行数据查找,如没有发现对应数据,将越过二级缓存,直接调用SQL完成数据读取。
==========================================
以上是深入浅出Hibernate一书第245页中的一部分。
以前因为读过这本书,所以没有使用过get()方法,一直用load()。这两天认真的重新读了一遍,并且做了试验,发现这一句有误。我写了代码测试了,两个不同session中对同一条记录的查询动作,不论是get还是load,都只输出一句sql,也就是说get和load都利用到了二级缓存。
附上测试代码:
TestCase(JUnit4)
package test.hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import test.hibernate.entity.Member;
/**
* @(#)HibernateTest.java 2008-6-21 下午04:43:55
*
* @author Yuan
* 类说明
*/
public class HibernateTest {
private static SessionFactory sessionFactory;
private static Session session;
@Before
public void setUp(){
sessionFactory = new Configuration().configure().buildSessionFactory();
}
@After
public void tearDown(){
sessionFactory.close();
}
/**
* 测试Session.load()
*/
@Test
public void testLoad(){
System.out.println("**********************Load**********************");
openSessionAndBeginTransaction();
((Member)session.load(Member.class, "402880b31aab576f011aab5771bc0005")).getMemberName();
commitTransactionAndCloseSession();
openSessionAndBeginTransaction();
((Member)session.load(Member.class, "402880b31aab576f011aab5771bc0005")).getMemberName();
commitTransactionAndCloseSession();
}
/**
* 测试Session.get()
*/
@Test
public void testGet(){
System.out.println("**********************Get**********************");
openSessionAndBeginTransaction();
session.get(Member.class, "402880b31aab576f011aab5771bc0005");
commitTransactionAndCloseSession();
openSessionAndBeginTransaction();
session.get(Member.class, "402880b31aab576f011aab5771bc0005");
commitTransactionAndCloseSession();
}
private void openSessionAndBeginTransaction(){
session = sessionFactory.openSession();
session.beginTransaction();
}
private void commitTransactionAndCloseSession(){
session.getTransaction().commit();
session.flush();
session.close();
}
}
Entity
package test.hibernate.entity;
import java.io.Serializable;
/**
* @(#)Member.java 2008-6-21 下午04:47:26
*
* @author Yuan
* Member Entity
*/
public class Member implements Serializable {
private static final long serialVersionUID = 3667540833969806410L;
private String memberID;
private String memberName;
private String password;
private String realName;
public String getMemberID() {
return memberID;
}
public void setMemberID(String memberID) {
this.memberID = memberID;
}
public String getMemberName() {
return memberName;
}
public void setMemberName(String memberName) {
this.memberName = memberName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
}
Member.hbm.xml
<?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">
<hibernate-mapping>
<class name="test.hibernate.entity.Member" table="t_member">
<cache usage="read-write"/>
<id name="memberID" type="string" length="32">
<generator class="uuid"/>
</id>
<property name="memberName" type="string" length="32" not-null="true"/>
<property name="password" type="string" length="32" not-null="true"/>
<property name="realName" type="string" length="32"/>
</class>
</hibernate-mapping>
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">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.url">
jdbc:mysql://127.0.0.1:3306/test
</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.dialect">
org.hibernate.dialect.MySQL5InnoDBDialect
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">******</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.cache.provider_class">
net.sf.ehcache.hibernate.EhCacheProvider
</property>
<!--property name="hibernate.hbm2ddl.auto">
create
</property-->
<mapping resource="test/hibernate/entity/Member.hbm.xml"/>
</session-factory>
</hibernate-configuration>
ehcache.xml
<?xml version="1.0" encoding="utf-8"?>
<ehcache>
<diskStore path = "java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"/>
</ehcache>
分享到:
相关推荐
根据提供的标题“深入浅出 Hibernate.pdf”以及描述“深入浅出 Hibernate.pdf”,我们可以推断这份文档主要讲解了Hibernate框架的相关知识。接下来,我们将基于这些信息展开详细的解释与知识点的梳理。 ### ...
深入浅出hibernate 清晰版
《深入浅出Hibernate》这本书是关于Java ORM框架Hibernate的深度解析。读书笔记主要涉及了实体对象的生命周期、实体对象的识别以及数据缓存这三大核心概念。 首先,实体对象的生命周期是Hibernate中至关重要的概念...
夏昕的 深入浅出Hibernate>>是一本非常不错的解析Hibernate的书籍
深入浅出Hibernate
本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...
本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...
Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作,通过将Java对象与数据库表之间的映射关系进行抽象,使得开发人员可以专注于业务逻辑,而无需过多关注底层的SQL操作。...
《深入浅出Hibernate》这本书是针对初学者设计的,旨在帮助读者快速掌握Hibernate这一流行的Java对象关系映射(ORM)框架。Hibernate是一个强大的工具,它简化了Java应用程序与数据库之间的交互,通过提供一种抽象...
深入浅出Hibernate 作者:夏昕 曹晓刚 7Z压缩:分包一大小18mb、分包二4mb 使用:把两个压缩包一起解压就可以了
9, 在您的Eclipse 3中,按照书中的步骤安装hibernate synchronizer. 10,在您的eclipse中,建立两个User Library: 菜单window -> preference -> Java -> Build Path -> User Librarys,分别建立名为Hibernate2,...
深入浅出 Hibernate 电子书 中文
深入浅出Hibernate完整版,除了资料外,还包括PPT和类型映射关系图
《深入浅出Hibernate》这本书是Hibernate技术学习的重要参考资料,它为读者提供了全面、深入的Hibernate框架理解。Hibernate是一个开源的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互,使得...
《深入浅出Hibernate》是夏昕撰写的一本关于Java持久化框架Hibernate的专业书籍。Hibernate作为一款流行的ORM(对象关系映射)工具,是Java开发者在处理数据库操作时的重要选择。这本书详细介绍了Hibernate的核心...
加了标签的《深入浅出HIbernate》,方便阅读和查找。
part1 一个2个 目前网上能找到最好的中文hibernate教程