get()和load()的区别
load()没有使用对象的其他属性的时候,没有SQL 延迟加载
get() :没有使用对象的其他属性的时候,也生成了SQL 立即加载
是什么导致了延迟加载?
解析:是因为内存中构建了代理对象。
load()延迟加载案例:
Session session; Transaction tx; @After public void afterTest(){ tx.commit(); HibernateUtil.closeSession(); } @Before public void initDate(){ session=HibernateUtil.getSession(); tx = session.beginTransaction(); } @Test //延迟加载 public void loadTest(){ Student stu = (Student)session.load(Student.class, 1); }
运行
Session session; Transaction tx; @After public void afterTest(){ tx.commit(); HibernateUtil.closeSession(); } @Before public void initDate(){ session=HibernateUtil.getSession(); tx = session.beginTransaction(); } @Test //延迟加载 public void loadTest(){ Student stu = (Student)session.load(Student.class, 1); System.out.println(stu); }
运行
剖析
---------------------------------------------------------------------------------------
-
---------------------------------------------------------------------------------------
get()立即加载案例
Session session; Transaction tx; @After public void afterTest(){ tx.commit(); HibernateUtil.closeSession(); } @Before public void initDate(){ session=HibernateUtil.getSession(); tx = session.beginTransaction(); } @Test public void getTest(){ Student stu = (Student)session.get(Student.class, 1); }
运行