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
参考:点击打开链接