EhCache简单使用

1.导入jar包,在hibernate的lib/option/ehcache下,引入hibernate jar 在lib/require/

引入ehcache.xml,解释如下:


2.配置hibernate.cfg.xml


3.编写测试类

初始化sessionFactory

    private static SessionFactory sessionFactory=null;
    static{
        Configuration cfg=new Configuration().configure();
        //4.0
        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();  
        sessionFactory = cfg.buildSessionFactory(serviceRegistry);  
        System.out.println("statickkkkkk");
    }

//<4.0
    public Session  getSession(){
        System.out.println("init");
        Configuration cfg=new Configuration().configure();
        SessionFactory sf= cfg.buildSessionFactory();
        Session session=sf.openSession();
        return session;
    }

-------------------------------------------------------------------------------------------

//测试集合缓存
    @org.junit.Test
    public void testCache3(){
        Session session=sessionFactory.openSession();
        session.beginTransaction();
        Department dep= (Department) session.get(Department.class, 6);
        System.out.println( dep.getName());
        System.out.println( dep.getEmployees());
        session.getTransaction().commit();
        session.close();
        
        System.out.println("===================");
        
        Session session2=sessionFactory.openSession();
        session2.beginTransaction();
        Department dep2= (Department) session2.get(Department.class, 6);
        System.out.println( dep2.getName());
        //开启了集合缓存 ,不会发出sql
        Set<Employee> ss= dep2.getEmployees();
        for (Employee employee : ss) {
            
            System.out.println( employee.getName());
        }
        session2.getTransaction().commit();
        session2.close();
    }

结果:

Hibernate: select department0_.id as id1_0_0_, department0_.name as name2_0_0_ from testj.department department0_ where department0_.id=?
开发部
Hibernate: select employees0_.department_id as departme2_0_0_, employees0_.id as id1_1_0_, employees0_.id as id1_1_1_, employees0_.department_id as departme2_1_1_, employees0_.email as email3_1_1_, employees0_.hiredate as hiredate4_1_1_, employees0_.name as name5_1_1_, employees0_.salary as salary6_1_1_, employees0_.pwd as pwd7_1_1_, employees0_.grade as grade8_1_1_ from testj.employee employees0_ where employees0_.department_id=?
[cn.domain.Employee@fd38e0, cn.domain.Employee@26cb7f, cn.domain.Employee@b1ab20, cn.domain.Employee@a5ff76, cn.domain.Employee@a78f21, cn.domain.Employee@59ffc7]
===================
开发部
tom
tom
tom
tom
tom
tom

-------------------------------------------------------------------------------------------

测试查询缓存:内存缓存5个对象,其余的缓存到硬盘

    //二级缓存, 查询缓存,会以hql作为缓存的key
    @org.junit.Test
    public void testCache2(){
        Session session=sessionFactory.openSession();
        session.beginTransaction();
        List<Employee> emplist= session.createQuery("FROM Employee as emp where emp.id<=9 ").setCacheable(true).list();
        System.out.println(emplist);
        session.getTransaction().commit();
        session.close();
        System.out.println("-----------------------------");
        Session session2=sessionFactory.openSession();
        session2.beginTransaction();
        session2.createQuery("FROM Employee as emp where emp.id<=9 ").setCacheable(true).list();
        session2.getTransaction().commit();
        session2.close();
    }

打印:

Hibernate: select employee0_.id as id1_1_, employee0_.department_id as departme2_1_, employee0_.email as email3_1_, employee0_.hiredate as hiredate4_1_, employee0_.name as name5_1_, employee0_.salary as salary6_1_, employee0_.pwd as pwd7_1_, employee0_.grade as grade8_1_ from testj.employee employee0_ where employee0_.id<=9
[cn.domain.Employee@17f8483, cn.domain.Employee@f71157, cn.domain.Employee@939462, cn.domain.Employee@f2d11a, cn.domain.Employee@17e1d1e, cn.domain.Employee@a9b5f4]
-----------------------------

其余对象缓存到硬盘

-------------------------------------------------------------------------------------------

    //二级缓存,二级缓存特效:更新删除会让对应的缓存失效,重发sql
    @org.junit.Test
    public void testCache(){
        Session session=sessionFactory.openSession();

        //同一个session 范围,会默认启用session一级缓存,范围太小,所以要用二级缓存
        Transaction ta= session.beginTransaction();
        
        Employee emp= (Employee) session.get(Employee.class, 5);
        //CURD,不能说明问题
//        emp.setName("cindy23");
//        session.update(emp);
        //hql语句
        session.createQuery("UPDATE Employee e SET e.name=? WHERE e.id=?")
        .setParameter(0, "lily2")
        .setParameter(1, 5)
        .executeUpdate();
        
        System.out.println(emp.getName());
        ta.commit();
        
        session.close();
        System.out.println("---------------------");
        Session session2=sessionFactory.openSession();

        Employee emp2= (Employee) session2.get(Employee.class, 5);
        System.out.println(emp2.getName());
        session2.close();
    }

结果:

Hibernate: select employee0_.id as id1_1_0_, employee0_.department_id as departme2_1_0_, employee0_.email as email3_1_0_, employee0_.hiredate as hiredate4_1_0_, employee0_.name as name5_1_0_, employee0_.salary as salary6_1_0_, employee0_.pwd as pwd7_1_0_, employee0_.grade as grade8_1_0_ from testj.employee employee0_ where employee0_.id=?
Hibernate: update testj.employee set name=? where id=?
lily2
---------------------
Hibernate: select employee0_.id as id1_1_0_, employee0_.department_id as departme2_1_0_, employee0_.email as email3_1_0_, employee0_.hiredate as hiredate4_1_0_, employee0_.name as name5_1_0_, employee0_.salary as salary6_1_0_, employee0_.pwd as pwd7_1_0_, employee0_.grade as grade8_1_0_ from testj.employee employee0_ where employee0_.id=?
lily3

参考:点击打开链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值