get():
@Test
public void testGet() {
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
transaction.begin();
Customer c = (Customer) session.get(Customer.class, 1);
System.out.println(c);
transaction.commit();
session.close();
}
根据ID查询数据,立即加载数据,查询后返回的也是Customer对象,如果数据不存在返回null
load():
@Test
public void testLad() {
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
transaction.begin();
Customer c = (Customer) session.load(Customer.class, 1);
System.out.println(c);
transaction.commit();
session.close();
}
根据ID查询数据,延迟加载数据,当访问Customer类中的某个属性是才会触发查询,返回的也不是Customer对象,是一个代理对象,默认代理对象的数据都为null,如果对象不存在抛出 ObjectNotFoundException 异常
这里面handler相当于一个回调函数,当调用Customer对象的一个属性时,通过handle执行查询
handler未初始化
handler初始化后
如果Customer类被声明为final,load()延迟加载的策略会被转换为get()立即加载