主要是session.load与session.get方法区别
session.get是只要调用就去数据库查询
与session.load方法是调用了模型的非主键getter方法去查询
要注意是非主键
还是菜鸟文
话不多说 上图片与代码
load方法简单原理
load测试方法
@Test
public void load() {
Session session=null;
Student student=null;
try {
session = HibernateUitl.getSession();
student = (Student) session.load(Student.class, 2);
System.out.println("~~~~~~~~~~~~~");
System.out.println(student.getId());
System.out.println(student.getAge());
System.out.println(student.getAge());
System.out.println(student.getName());
} catch (HibernateException e) {
e.printStackTrace();
}finally {
if(session!=null&&session.isOpen()){
session.close();
}
}
}
打印结果:
~~~~~~~~~~~~~
2
Hibernate: select student0_.s_id as s1_0_0_, student0_.s_name as s2_0_0_, student0_.s_age as s3_0_0_ from Student student0_ where student0_.s_id=?
19
19
唐伯虎
本应该先打印SQL语句,此结果证明在需要getter属性时才去查找数据库 并且在调用一次以后,所有属性都已有值,不再去查询,进入到缓存
本来我以为当session.close后对象地址还在,也就是Student对象还存在
在session.close后,输出属性getName,报错说session不存在
所以,session.close以后,对象也将销毁