zoukankan      html  css  js  c++  java
  • 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()+"	"+emp.getDept().getDname());
            
            session.close();
            //同一个session内,再次获取ID为7639的员工
            Emp emp2 = (Emp) session.load(Emp.class, (short)7369);
            System.out.println(emp2.getEname()+"	"+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()+"	"+emp.getSal());
                session.close();
                Session session2=HibernateSessionFactory.getSession();
                Emp emp2 = (Emp) session2.load(Emp.class, (short)7369);
                System.out.println(emp2.getEname()+"	"+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()+"	"+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()+"	"+emp2.getSal());
        }

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

  • 相关阅读:
    不删除数据库,只删除GridView的某一行!
    纯CSS无图打造圆角Table 无图制作圆角
    2009年总结与2010总体计划
    工作中的碰到的问题,以及处理过程:
    SQL Server 2005 不允许远程连接解决方法
    Visual Studio 2008项目模板丢失的解决办法
    C#格式化数值结果表
    准备把csdn的博客搬到这里
    生产系统中 RAC 数据库服务器 不要批量 gzip压缩
    不再更新的业务统计表
  • 原文地址:https://www.cnblogs.com/sincoolvip/p/6058806.html
Copyright © 2011-2022 走看看