架包
ehcache-core-2.4.3.jar
hibernate-ehcache-4.2.20.Final.jar
slf4j-api-1.6.1.jar
pom.xml
- <dependency>
- <groupId>net.sf.ehcache</groupId>
- <artifactId>ehcache-core</artifactId>
- <version>2.4.3</version>
- </dependency>
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-ehcache</artifactId>
- <version>4.2.20.Final</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- <version>1.6.1</version>
- </dependency>
hibernate.cfg.xml
- <span style="white-space:pre"></span><pre name="code" class="html"> <!-- 开启二级缓存 -->
- <property name="cache.use_second_level_cache">true</property>
- <!-- 开启查询缓存 -->
- <property name="hibernate.cache.use_query_cache">true</property>
- <property name="hibernate.cache.region.factory_class">
- org.hibernate.cache.EhCacheRegionFactory
- </property> </pre><br>
- <pre></pre>
- <p></p>
- <h2><a name="t3"></a><br>
- Emp.hbm.xml</h2>
- <p></p>
- <p></p>
- <pre name="code" class="html"></pre><pre name="code" class="html"><hibernate-mapping>
- <class name="cn.et.hibernate.lesson02.relation.Emp" table="EMP" schema="SCOTT">
- <!-- 设置该映射文件使用二级缓存 -->
- <cache usage="read-only"/>
- <id name="empno" type="java.lang.Short">
- <column name="EMPNO" precision="4" scale="0" />
- <generator class="assigned" />
- </id>
- </pre>
- <h2><a name="t4"></a><br>
- 测试类</h2>
- <p></p><pre name="code" class="java">package cn.et.hibernate.lesson02.cache;
- import java.util.List;
- import org.hibernate.Criteria;
- import org.hibernate.Query;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.cfg.Configuration;
- import org.hibernate.criterion.Criterion;
- import org.hibernate.criterion.Restrictions;
- import org.junit.Test;
- import cn.et.hibernate.lesson02.relation.Emp;
- /**
- * 一级缓存 同一个Session
- * 二级缓存 同一个SessionFactory
- */
- public class TestHibernate {
- /**
- * 一级缓存 同一个Session
- */
- @Test
- public void test(){
- SessionFactory sf = new Configuration().configure("/cn/et/hibernate/lesson02/relation/hibernate.cfg.xml").buildSessionFactory();
- Session session = sf.openSession();
- Emp emp = (Emp)session.get(Emp.class, Short.parseShort("8000"));
- Emp emp1 = (Emp)session.get(Emp.class, Short.parseShort("8000"));
- System.out.println(emp==emp1);
- }
- /**
- * 二级缓存 同一个SessionFactory
- * 二级缓存默认是关闭的
- */
- @Test
- public void test1(){
- SessionFactory sf = new Configuration().configure("/cn/et/hibernate/lesson02/relation/hibernate.cfg.xml").buildSessionFactory();
- Session session = sf.openSession();
- Emp emp = (Emp)session.get(Emp.class, Short.parseShort("8000"));
- Session session1 = sf.openSession();
- Emp emp1 = (Emp)session1.get(Emp.class, Short.parseShort("8000"));
- System.out.println(emp==emp1);
- }
- /**
- * 查询缓存是基于二级缓存的
- * 查询缓存是无法预知查询数据量的大小 经常会出现性能问题
- */
- @Test
- public void test2(){
- SessionFactory sf = new Configuration().configure("/cn/et/hibernate/lesson02/relation/hibernate.cfg.xml").buildSessionFactory();
- Session session = sf.openSession();
- Query query = session.createQuery("from Emp where sal>200");
- List list = query.list();
- Session session1 = sf.openSession();
- Emp emp1 = (Emp)session1.get(Emp.class, Short.parseShort("8000"));
- System.out.println(emp1.getEname());
- }
- }
- </pre><br>
- <br>
- <p></p>
- <p><br>
- <br>
- </p>
- <p><br>
- </p>
- <p><br>
- </p>