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">
<!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration>
<session-factory> <property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <property name="connection.url"> jdbc:mysql://localhost:3307/users </property> <property name="connection.username">root</property> <property name="connection.password">root</property> <property name="connection.driver_class"> com.mysql.jdbc.Driver </property> <property name="myeclipse.connection.profile">mysqlusers</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="current_session_context_class">thread</property> <property name="cache.provider_class"> org.hibernate.cache.EhCacheProvider </property> <mapping resource="com/b510/examplex/Guestbook.hbm.xml" />
</session-factory>
</hibernate-configuration>
在src目录下面编写ehcache.xml
代码;
<?xml version="1.0" encoding="UTF-8"?> <ehcache> <!-- 说明:maxElementsInMemory 设置 保存在内存中的缓存对象的最大数量 etemal 设置缓存中对象 是否永远不过期,如果值为true,超过设置被忽略,缓存对象永远不过期 timeToIdleSeconds 设置缓存中对象在他过期之前的最大空闲时间,单位为秒 timeToLiveSeconds 设置缓存中对象在他过期之前的最大生存时间 ,单位为秒 overflowToDisk 设置内存中的缓存对象达到maxElementsInMemory限制时,是否将缓存对象保存到硬盘中 --> <diskStore path="java.io.tmpdir"/> <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"/> <cache name="com.b510.examplex.Guestbook" maxElementsInMemory="1000" eternal="true" timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true"/> </ehcache>
Guestbook.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="com.b510.examplex.Guestbook" table="guestbook" catalog="users" optimistic-lock="version"> <!-- EHCache二级缓存的策略: 只读缓存 (read-only) 读/写缓存 (read-write) 不严格的读/写缓存 (nonstrict-read-write) 事务缓存 (transactional) EHCache不支持事务缓存 --> <!-- 应用EHCache二级缓存的策略 --> <cache usage="read-only"/> <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="increment" /> </id> <version name="version" column="version" access="field"></version> <property name="name" type="java.lang.String"> <column name="name" length="200" /> </property> <property name="email" type="java.lang.String"> <column name="email" length="50" /> </property> <property name="phone" type="java.lang.String"> <column name="phone" length="20" /> </property> <property name="title" type="java.lang.String"> <column name="title" length="200" /> </property> <property name="content" type="java.lang.String"> <column name="content" length="1000" /> </property> <property name="createdTime" type="java.util.Date"> <column name="created_time" length="10" /> </property> </class> </hibernate-mapping>
测试代码:
HIbernateTest.java
代码:
/** * */ package com.b510.examplex;
import java.util.Iterator;
import org.hibernate.Query; import org.hibernate.Session;
/** * * @author XHW * * @date 2011-7-15 * */ public class HibernateTest {
/** * @param args */ public static void main(String[] args) { new HibernateTest().getGuestbooks(); }
public void getGuestbooks(){ Session session=HibernateSessionFactoryUtil.getSessionFactory().openSession(); session.beginTransaction(); Query query=session.createQuery("from Guestbook"); Iterator it=query.iterate(); while(it.hasNext()){ Guestbook gb=(Guestbook)it.next(); System.out.println("name: "+gb.getName()+" Id:"+gb.getId()); } query=session.createQuery("from Guestbook where id=2"); Guestbook gb=(Guestbook)query.uniqueResult(); System.out.println("name: "+gb.getName()+" Id:"+gb.getId()); session.getTransaction().commit(); } }
运行效果:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly. Hibernate: select guestbook0_.id as col_0_0_ from users.guestbook guestbook0_ Hibernate: select guestbook0_.id as id0_0_, guestbook0_.version as version0_0_, guestbook0_.name as name0_0_, guestbook0_.email as email0_0_, guestbook0_.phone as phone0_0_, guestbook0_.title as title0_0_, guestbook0_.content as content0_0_, guestbook0_.created_time as created8_0_0_ from users.guestbook guestbook0_ where guestbook0_.id=? name: liuwei Id:1 Hibernate: select guestbook0_.id as id0_0_, guestbook0_.version as version0_0_, guestbook0_.name as name0_0_, guestbook0_.email as email0_0_, guestbook0_.phone as phone0_0_, guestbook0_.title as title0_0_, guestbook0_.content as content0_0_, guestbook0_.created_time as created8_0_0_ from users.guestbook guestbook0_ where guestbook0_.id=? name: Hongtenzone@foxmail.com Id:2 Hibernate: select guestbook0_.id as id0_0_, guestbook0_.version as version0_0_, guestbook0_.name as name0_0_, guestbook0_.email as email0_0_, guestbook0_.phone as phone0_0_, guestbook0_.title as title0_0_, guestbook0_.content as content0_0_, guestbook0_.created_time as created8_0_0_ from users.guestbook guestbook0_ where guestbook0_.id=? name: Hongten Id:3 Hibernate: select guestbook0_.id as id0_0_, guestbook0_.version as version0_0_, guestbook0_.name as name0_0_, guestbook0_.email as email0_0_, guestbook0_.phone as phone0_0_, guestbook0_.title as title0_0_, guestbook0_.content as content0_0_, guestbook0_.created_time as created8_0_0_ from users.guestbook guestbook0_ where guestbook0_.id=? name: HOngten Id:4 Hibernate: select guestbook0_.id as id0_0_, guestbook0_.version as version0_0_, guestbook0_.name as name0_0_, guestbook0_.email as email0_0_, guestbook0_.phone as phone0_0_, guestbook0_.title as title0_0_, guestbook0_.content as content0_0_, guestbook0_.created_time as created8_0_0_ from users.guestbook guestbook0_ where guestbook0_.id=? name: HOngten Id:5 Hibernate: select guestbook0_.id as id0_0_, guestbook0_.version as version0_0_, guestbook0_.name as name0_0_, guestbook0_.email as email0_0_, guestbook0_.phone as phone0_0_, guestbook0_.title as title0_0_, guestbook0_.content as content0_0_, guestbook0_.created_time as created8_0_0_ from users.guestbook guestbook0_ where guestbook0_.id=? name: HOngten Id:6 Hibernate: select guestbook0_.id as id0_0_, guestbook0_.version as version0_0_, guestbook0_.name as name0_0_, guestbook0_.email as email0_0_, guestbook0_.phone as phone0_0_, guestbook0_.title as title0_0_, guestbook0_.content as content0_0_, guestbook0_.created_time as created8_0_0_ from users.guestbook guestbook0_ where guestbook0_.id=? name: HOngten Id:7 Hibernate: select guestbook0_.id as id0_, guestbook0_.version as version0_, guestbook0_.name as name0_, guestbook0_.email as email0_, guestbook0_.phone as phone0_, guestbook0_.title as title0_, guestbook0_.content as content0_, guestbook0_.created_time as created8_0_ from users.guestbook guestbook0_ where guestbook0_.id=2 name: Hongtenzone@foxmail.com Id:2
测试代码二:
HibernateTest.java
代码:
/** * */ package com.b510.examplex;
import java.util.Iterator;
import org.hibernate.Query; import org.hibernate.Session;
/** * * @author XHW * * @date 2011-7-15 * */ public class HibernateTest {
/** * @param args */ public static void main(String[] args) { new HibernateTest().getGuestbooks(); }
public void getGuestbooks(){ Session session=HibernateSessionFactoryUtil.getSessionFactory().openSession(); session.beginTransaction(); Query query=session.createQuery("from Guestbook"); Iterator it=query.iterate(); while(it.hasNext()){ Guestbook gb=(Guestbook)it.next(); System.out.println("name: "+gb.getName()+" Id:"+gb.getId()); } Guestbook gb=(Guestbook)session.load(Guestbook.class, 2); System.out.println("name: "+gb.getName()+" Id:"+gb.getId()); session.getTransaction().commit(); } }
运行效果:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly. Hibernate: select guestbook0_.id as col_0_0_ from users.guestbook guestbook0_ Hibernate: select guestbook0_.id as id0_0_, guestbook0_.version as version0_0_, guestbook0_.name as name0_0_, guestbook0_.email as email0_0_, guestbook0_.phone as phone0_0_, guestbook0_.title as title0_0_, guestbook0_.content as content0_0_, guestbook0_.created_time as created8_0_0_ from users.guestbook guestbook0_ where guestbook0_.id=? name: liuwei Id:1 Hibernate: select guestbook0_.id as id0_0_, guestbook0_.version as version0_0_, guestbook0_.name as name0_0_, guestbook0_.email as email0_0_, guestbook0_.phone as phone0_0_, guestbook0_.title as title0_0_, guestbook0_.content as content0_0_, guestbook0_.created_time as created8_0_0_ from users.guestbook guestbook0_ where guestbook0_.id=? name: Hongtenzone@foxmail.com Id:2 Hibernate: select guestbook0_.id as id0_0_, guestbook0_.version as version0_0_, guestbook0_.name as name0_0_, guestbook0_.email as email0_0_, guestbook0_.phone as phone0_0_, guestbook0_.title as title0_0_, guestbook0_.content as content0_0_, guestbook0_.created_time as created8_0_0_ from users.guestbook guestbook0_ where guestbook0_.id=? name: Hongten Id:3 Hibernate: select guestbook0_.id as id0_0_, guestbook0_.version as version0_0_, guestbook0_.name as name0_0_, guestbook0_.email as email0_0_, guestbook0_.phone as phone0_0_, guestbook0_.title as title0_0_, guestbook0_.content as content0_0_, guestbook0_.created_time as created8_0_0_ from users.guestbook guestbook0_ where guestbook0_.id=? name: HOngten Id:4 Hibernate: select guestbook0_.id as id0_0_, guestbook0_.version as version0_0_, guestbook0_.name as name0_0_, guestbook0_.email as email0_0_, guestbook0_.phone as phone0_0_, guestbook0_.title as title0_0_, guestbook0_.content as content0_0_, guestbook0_.created_time as created8_0_0_ from users.guestbook guestbook0_ where guestbook0_.id=? name: HOngten Id:5 Hibernate: select guestbook0_.id as id0_0_, guestbook0_.version as version0_0_, guestbook0_.name as name0_0_, guestbook0_.email as email0_0_, guestbook0_.phone as phone0_0_, guestbook0_.title as title0_0_, guestbook0_.content as content0_0_, guestbook0_.created_time as created8_0_0_ from users.guestbook guestbook0_ where guestbook0_.id=? name: HOngten Id:6 Hibernate: select guestbook0_.id as id0_0_, guestbook0_.version as version0_0_, guestbook0_.name as name0_0_, guestbook0_.email as email0_0_, guestbook0_.phone as phone0_0_, guestbook0_.title as title0_0_, guestbook0_.content as content0_0_, guestbook0_.created_time as created8_0_0_ from users.guestbook guestbook0_ where guestbook0_.id=? name: HOngten Id:7 name: Hongtenzone@foxmail.com Id:2
我们会看到这里和上面的查询结果不同的是,这次要少用一条select语句。这就是利用hibernate的二级缓存,
他在内存中保留了我们要查询的id=2的这条记录,所以当我们再次查询的时候,是直接从缓存中读出来。