首页 > 代码库 > hibernate-cache

hibernate-cache

hibernate缓存分:一级缓存、二级缓存、三级缓存

一级缓存:Session内的缓存

实例:

/*一级缓存:
     * session内的缓存
     * */
    @Test
    public void test1(){
        
        /*使用缓存之前,2条结果*/
        Session session =HibernateSessionFactory.getSession();
        //第一次查询
        Emp emp = (Emp) session.load(Emp.class, (short)7369);
        System.out.println(emp.getEname()+"\t"+emp.getDept().getDname());
        
        session.close();
        //同一个session内,再次获取ID为7639的员工
        Emp emp2 = (Emp) session.load(Emp.class, (short)7369);
        System.out.println(emp2.getEname()+"\t"+emp2.getDept().getDname());
        
    }

二级缓存:

进程 或集群范围内的缓存。可以被所有session共享,生活周期与SessionFactory一样,
* 二级缓存是可配置的插件,hibernate打包一些开源缓存实现,提供对它们的内置支持

用到的jar包和ehcache.xml

hibernate.cfg.xml配置:

<!--二级缓存配置开始====  -->
    <property name="cache.use_second_level_cache">true</property>
    <property name="cache.provider_class">
        org.hibernate.cache.EhCacheProvider
    </property>

实体类映射文件Emp.hbm.xml中配置:

 <!--  实体类中二级缓存配置-->
    <cache usage="read-write"/>

测试代码:

/*二级缓存:
     * 进程 或集群范围内的缓存。可以被所有session共享,生活周期与SessionFactory一样,
     * 二级缓存是可配置的插件,hibernate打包一些开源缓存实现,提供对它们的内置支持
     * */
    
    @Test
    public void test2(){
        Session session=HibernateSessionFactory.getSession();
        
        try {
            Emp emp = (Emp) session.load(Emp.class, (short)7369);
            System.out.println(emp.getEname()+"\t"+emp.getSal());
            session.close();
            Session session2=HibernateSessionFactory.getSession();
            Emp emp2 = (Emp) session2.load(Emp.class, (short)7369);
            System.out.println(emp2.getEname()+"\t"+emp2.getSal());
            session2.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

三级缓存,查询缓存:

hibernate.cfg.xml中配置,所有配置均在二级缓存配置之上加入:

<property name="cache.use_query_cache">true</property>

测试代码:

/*query查询缓存*/
    @Test
    public void test3(){
        Session session=HibernateSessionFactory.getSession();
        Query query=session.createQuery("from Emp where empno=7369");
        Emp emp = (Emp) query.setCacheable(true).uniqueResult();
        System.out.println(emp.getEname()+"\t"+emp.getSal());
        
        session.close();
        //在不同的session范围内,现次获取ID=7369的学生信息
        Session session2=HibernateSessionFactory.getSession();
        Query query2=session.createQuery("from Emp where empno=7369");
        Emp emp2 = (Emp) query.setCacheable(true).uniqueResult();
        System.out.println(emp2.getEname()+"\t"+emp2.getSal());
    }

 

链接:http://pan.baidu.com/s/1geVPuoV 密码:s3sh

hibernate-cache