@Test
public void testClear() {
Session session = sf.getCurrentSession();
session.beginTransaction();
Student s = (Student)session.load(Student.class, 2);
System.out.println(s.getName());
Student s2 = (Student)session.load(Student.class, 2);
System.out.println(s2.getName());
session.getTransaction().commit();
}
上面这段程序中我们把id=2这条记录load了两次,但是从后台可以看到只发了一条load的sql语句
这是因为第一次load之后,在缓存中已经有了这个对象,再load就不会从数据库读取,而是直接从缓存中取出对象。
接下来我们在两次load中加入clear(),clear方法的作用是清除session缓存。
@Test
public void testClear() {
Session session = sf.getCurrentSession();
session.beginTransaction();
Student s = (Student)session.load(Student.class, 2);
System.out.println(s.getName());
session.clear();
Student s2 = (Student)session.load(Student.class, 2);
System.out.println(s2.getName());
session.getTransaction().commit();
}
可以看到此时发出了两条sql语句,是因为session缓存已经被清除
无论是load方法还是get方法,都会首先查找缓存,如果没有,才去数据库中查找。调用clear()方法可以清除session缓存。