天天看點

Hibernate - session一級緩存

看下面例子,就很快明白了

連續查詢兩次

public void testLoad(){
			
		Session session =null;
		try{
			session = HibernateUtil.getSession();
			session.beginTransaction();

			Student s = (Student)session.load(Student.class, 1);
			System.out.println("1.student Name:"+s.getName());
			
			Student s1 = (Student)session.load(Student.class, 1);
			System.out.println("2.student Name:"+s1.getName());

			session.getTransaction().commit();
		}catch(Exception e){
			session.getTransaction().rollback();
			e.printStackTrace();
		}finally{
			HibernateUtil.closeSession(session); 
		}
	}
           
  • 代碼分析
  • 隻執行一次sql語句:第一次load查詢後放于緩存,第二次load查詢會先看下緩存有沒有,如果有的話,從緩存中擷取資料

先添加,再查詢

public void testAdd2(){
		Student s1 =  new Student();
		s1.setName("Jack");
		s1.setScore(90);
		
		
		Session session =null;
		try{
			session = HibernateUtil.getSession();
			session.beginTransaction();
			session.save(s1);
			
			Student s2 = (Student)session.load(Student.class, 2);
			System.out.println("2.student Name:"+s2.getName());
			
			session.getTransaction().commit();
		}catch(Exception e){
			session.getTransaction().rollback();
			e.printStackTrace();
		}finally{
			HibernateUtil.closeSession(session); 
		}
	}
           
  • 代碼分析:
  • 隻執行一條添加sql語句:save的時候先往緩存session裡放(此時沒有id),然後再往資料庫裡插入資料,再把id放到session裡。然後查詢的時候先檢視緩存裡有沒有id為2的資料,如果有就直接擷取

先查詢,然後關閉session,再查詢:

public void testLoad2(){
		
		Session session =null;
		try{
			session = HibernateUtil.getSession();
			session.beginTransaction();

			Student s = (Student)session.load(Student.class, 1);
			System.out.println("1.student Name:"+s.getName());
			
			session.getTransaction().commit();
		}catch(Exception e){
			session.getTransaction().rollback();
			e.printStackTrace();
		}finally{
			HibernateUtil.closeSession(session); 
		}
		
		session =null;
		try{
			session = HibernateUtil.getSession();
			session.beginTransaction();

			Student s = (Student)session.load(Student.class, 1);
			System.out.println("1.student Name:"+s.getName());
			
			session.getTransaction().commit();
		}catch(Exception e){
			session.getTransaction().rollback();
			e.printStackTrace();
		}finally{
			HibernateUtil.closeSession(session); 
		}
	}
           
  • 代碼分析:
  • 執行兩條sql語句,session關閉後,緩存資料也沒有了,需要再到資料庫查詢。這就是一級緩存

繼續閱讀