一、
package com.ru.service;
import static org.junit.Assert.*;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import com.ru.domain.Classes;
public class SessionTest {
@Test
public void test() {
//研究session的生命周期
Configuration cf=new Configuration().configure();
SessionFactory sf=cf.buildSessionFactory();
Session session=sf.openSession();
try {
Transaction tx=session.beginTransaction();
Classes clazz=new Classes();
clazz.setName("云1");
//clazz对象被放到session缓存中,session缓存中的clazz变量指向classes对象内存。在提交事务之前数据不会被存放到数据库
session.save(clazz);
//获取id值
int id=clazz.getId();
System.out.println("##########################"+id);
//clazz变量不再引用classes对象
clazz=null;
//查询一条数据,这个数据为classes对象
Classes clazz2=(Classes)session.get(Classes.class, id);
System.out.println("姓名:"+clazz2.getName()+"id:"+clazz2.getId());
//数据被放入数据库中
tx.commit();
//关闭session清空缓存,session中没有变量指向classes对象的内存。
session.close();
System.out.println("###############关闭session#########################");
//这时仍然可以访问到classes对象的属性。classes对象的地址没有被回收
System.out.println("姓名:"+clazz2.getName()+"id:"+clazz2.getId());
//clazz2变量不再引用classes对象,这是没有任何变量指向classes对象,内存地址被回收。
clazz2=null;
//会报错
System.out.println("姓名:"+clazz2.getName()+"id:"+clazz2.getId());
} catch (Exception e) {
e.printStackTrace();
}finally{
sf.close();
}
}
}
二、