Hibernate二级缓存 ---- 入门示例

一. 我们使用oscache来演示 , 引入oscache的jar包到工程中.


 

二. 把下载的Hibernate压缩包中的  hibernate-3.2\etc\oscache.properties放入classpath中. 用默认设置就行了.


 

三.修改hibernate.cfg.xml  , 加入如下, 意思启用二级缓存, 指定使用OSCache这个实现.

 

 

<!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="show_sql">true</property>
		<property name="hibernate.hbm2ddl.auto">update</property>
		
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
				 
		<property name="hibernate.connection.url">jdbc:mysql:///test</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">1234</property>
		
		<!-- 这行不写也行,默认就为true-->
		<property name="cache.use_second_level_cache">true</property>
		<!-- 对Query也开启缓存 ,由于命中率太低,建议不开 -->
		<property name="cache.use_query_cache">true</property>
		<!-- 指定使用OSCache这个实现-->
		<property name="cache.provider_class">org.hibernate.cache.OSCacheProvider</property>
		<!-- 打开统计信息-->
		<property name="generate_statistics">true</property>		
	    	
		<mapping resource="dao/po/Department.hbm.xml"/>
		<mapping resource="dao/po/Employee.hbm.xml"/>
		<mapping resource="dao/po/Person.hbm.xml"/>
		<mapping resource="dao/po/IdCard.hbm.xml"/>
		<mapping resource="dao/po/Teacher.hbm.xml"/>
		<mapping resource="dao/po/Student.hbm.xml"/>
		<mapping resource="dao/po/User.hbm.xml"/>	
		<mapping resource="extends_test/extends_1/Person.hbm.xml"/>
		<mapping resource="extends_test/extends_2/Person.hbm.xml"/>
		<mapping resource="extends_test/extends_4/Person.hbm.xml"/>	
	
		<!-- 以下类被缓存-->
		<class-cache class="dao.po.Person" usage="read-write"/>
		
	</session-factory>
</hibernate-configuration>

  

 

 

 

四.usage的说明


 

      "read-only"                      只读的,  po不能修改, 修改会抛异常

      "read-write"                    可对PO读写. 不怕并发修改

      "nonstrict-read-write"     非严格的 读写, 并发修改不会问题,  一般用在能容忍出问题的环境.

      "transactional"                有事务的,缓存 , oscache不是支持,  jboss 有实现.


 

 

 

五. 查询测试, 看看命中几次

 

package cache_test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.stat.Statistics;

import dao.HibernateUtil;
import dao.po.Person;

/**
 * 测试缓存
 * 
 */
public class Test
{
	public static void main(final String[] args)
	{
		query();
		final SessionFactory sf = HibernateUtil.getSessionFactory();
		final Statistics s = sf.getStatistics();
		System.out.println(s); //打印所有信息 监测SessionFactory
		System.out.println("---------------");
		System.out.println("放入:" + s.getSecondLevelCachePutCount()); //打印缓存的信息
		System.out.println("命中:" + s.getSecondLevelCacheHitCount());
		System.out.println("丢失:" + s.getSecondLevelCacheMissCount());
	}

	public static void query()
	{
		Session session = null;

		for (int i = 0; i < 10; i++)
		{
			session = HibernateUtil.getSeesion();
			final Person p1 = (Person) session.get(Person.class, 1);
			session.close();
			System.out.println(p1.getName());
		}

	}
}

 

 

六:  打印出:

放入:1
命中:9
丢失:1

你可能感兴趣的:(DAO,xml,Hibernate,mysql,cache)