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()立即加载