1.Dao 方法
/**
* 立即(饿汉)加载方法(性能低)
* @param sid
* @return
*/
public Student get(Integer sid) {
Session session = SessionFactoryUtil.getSession(); //获取session会话
Transaction transaction = session.beginTransaction(); //开启事物
System.out.println(123);
Student student = session.get(Student.class,sid); //操作数据库
System.out.println(456);
System.out.println("ID:"+student.getSid());
System.out.println("姓名:"+student.getSname()+"\r\r");
transaction.commit(); //提交事物
session.close(); //关闭session会话
return student;
}
/**
* 懒汉加载方法
* @param sid
* @return
*/
public Student load(Integer sid) {
Session session = SessionFactoryUtil.getSession(); //获取session会话
Transaction transaction = session.beginTransaction(); //开启事物
System.out.println(123);
Student student = session.load(Student.class,sid); //操作数据库
System.out.println(456);
System.out.println("ID:"+student.getSid());
System.out.println("姓名:"+student.getSname());
transaction.commit(); //提交事物
session.close(); //关闭session会话
return student;
}
2.测试方法
/**
* get方法与load方法的区别
* get方法:立即加载,获取的是具体的类对象
* load方法:懒汉加载,获取到的是hibernate根据实体类创建的代理对象,代理对象用来保存实体类对象的oid,oid是hibernate用来标识实体类的唯一性
*
* get方法运行结果:(注意运行结果的打印顺序)
* 输出结果:
*
* 123--开始执行
*
* Hibernate:
* select
* student0_.sid as sid1_0_0_,
* student0_.sname as sname2_0_0_
* from
* t_hibernate_student student0_
* where
* student0_.sid=?
*
* 456--结束执行
*
*
* ID:3
* 姓名:将百川
*
*/
@Test
public void testGet() {
Student student = stuDao.get(3);
// System.out.println("ID:"+student.getSid());
// System.out.println("姓名:"+student.getSname());
// System.out.println("类名:"+student.getClass().getName()); //类名:com.zy.two.entity.Student -- 实体类
}
/**
* get方法与load方法的区别
* get方法:立即加载,获取的是具体的类对象
* load方法:懒汉加载,获取到的是hibernate根据实体类创建的代理对象,代理对象用来保存实体类对象的oid,oid是hibernate用来标识实体类的唯一性
*
* load方法的运行结果:(注意运行结果的打印顺序)
* 输出结果:
*
* 123--开始执行
* 456--结束执行
*
*
* ID:3
* Hibernate:
* select
* student0_.sid as sid1_0_0_,
* student0_.sname as sname2_0_0_
* from
* t_hibernate_student student0_
* where
* student0_.sid=?
* 姓名:将百川
*
*/
@Test
public void testLoad() {
//错误:org.hibernate.LazyInitializationException: could not initialize proxy [com.zy.two.entity.Student#3] - no Session
Student student = stuDao.load(3);
// System.out.println("ID:"+student.getSid());
// System.out.println("姓名:"+student.getSname());
// System.out.println("类名:"+student.getClass().getName()); //类名:com.zy.two.entity.Student$HibernateProxy$zcUuLkZr -- 代理类
}