Hibernate的一级缓存
HIbernate是支持一级缓存。所谓的一级缓存就是Session级别的缓存。
意思就是说,同一个session查询同样的数据,只查询一次数据库。如果出现同多次同样的查询(get/load)
直接返回缓存的数据。
作用:缓存的作用:就是减少查询的次数,从而提高查询的效率!!!!
默认情况就支持一级缓存
如果支持缓存,get四次数据库,只查一次。
@Test
public void get(){
//1.获得操作对象
Session session = HibernateUtils.getSession();
//通过OID获得对应的记录
//如果支持缓存,get四次数据库,只查一次。
Customer customer1 = session.get(Customer.class,1L);
System.out.println(customer1.getCustName());
Customer customer2 = session.get(Customer.class,1L);
System.out.println(customer2.getCustName());
Customer customer3 = session.get(Customer.class,1L);
System.out.println(customer3.getCustName());
Customer customer4 = session.get(Customer.class,1L);
System.out.println(customer4.getCustName());
session.close();
}
因为使用了缓存
清空缓存的方法
清空缓存的三个方法。
1. 关闭 close()
2. 清空 clear()
3. 清空指定的实体态对象 evit()
public void get(){
//1.获得操作对象
Session session = HibernateUtils.getSession();
//通过OID获得对应的记录
//如果支持缓存,get四次数据库,只查一次。
Customer customer1 = session.get(Customer.class,1L);
System.out.println(customer1.getCustName());
//如果clear()清空同一个session的所有持久化对象,缓存被清空
session.clear();
Customer customer2 = session.get(Customer.class,1L);
System.out.println(customer2.getCustName());
//evict()清空指定的持久化对象,该对象的缓存被清空
session.evict(customer2);
Customer customer3 = session.get(Customer.class,1L);
session.clear();//先清除缓存,只是把持久态转成游离态而已,并没有清空数据
System.out.println(customer3.getCustName());
Customer customer4 = session.get(Customer.class,1L);
System.out.println(customer3.getCustName());
Customer customer5 = session.get(Customer.class,1L);
System.out.println(customer4.getCustName());
//表示关闭了session。session的所有缓存被清空
session.close();
}
注意,close,clear,evit清空缓存只是将持久态转成游离态,清空的是数据和数据库的关联,而不是清空数据。
缓存的作用:就是减少查询的次数,从而提高查询的效率!!!!