亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

【Hibernate】lazy延遲加載

2019-11-10 17:52:00
字體:
來源:轉載
供稿:網友

     延遲加載(lazy load)是(也稱為懶加載)Hibernate3關聯關系對象默認的加載方式,延遲加載機制是為了避免一些無謂的性能開銷而提出來的,所謂延遲加載就是當在真正需要數據的時候,才真正執行數據加載操作??梢院唵卫斫鉃?,只有在使用的時候,才會發出sql語句進行查詢。

    hibernate的lazy策略可以使用在如下四個場景:

    * <class>標簽上,可以取值:“true/false”

    * <PRoperty>標簽上,可以取值:“true/false”,但是需要類增強工具配合使用,不常用。

    * <set>/<list>標簽上,可以取值:“true/false/extra”,對集合的延遲加載很常用。

    * <many-to-one>/<one-to-one>單端關聯標簽上,可以取值"false/proxy/noproxy"

    最常使用的地方就是在<set>/<list>集合上。

    一個Demo

public void testQuery1(){	session session = null;	try{		session = HibernateUtils.getSession();		session.beginTransaction();		//查詢操作,不會發出sql		User user = (User)session.load(User.class, 1);				//顯示id--(代理操作)		System.out.println("user.id=" + user.getId());		//顯示name -- (數據庫開始查詢操作)		System.out.println("user.name=" + user.getName());				System.out.println("user.passWord=" + user.getPassword());		session.getTransaction().commit();	}catch(Exception e){		e.printStackTrace();			}finally{		HibernateUtils.closeSession(session);	}}        這個例子中:  (1)因為load默認支持lazy加載,執行session.load之后,打印user.getId();因為傳入的id,且通過代理操作,并未進行數據庫查詢,在打印user.getName()時,開始進行查詢操作。  (2)如果Name屬性支持lazy(在hbm.xml中將該屬性設置為lazy加載),執行到"user.getName()"的時候,才會把Name值加載出來。

     

   現在修改這個Demo:

public void testQuery2(){	Session session = null;	User user = null;	try{		session = HibernateUtils.getSession();		session.beginTransaction();				user = (User)session.load(User.class, 1);		session.getTransaction().commit();			}catch(Exception e){		e.printStackTrace();			}finally{		HibernateUtils.closeSession(session);		//放在session關閉之后		System.out.println("user.name=" + user.getName());	}		}            將user.getName()方法寫到了closeSession之后,報出SessionException的錯誤,可見,hibernate中使用lazy策略,必須放到session當中。

    對Collection集合中的“lazy”策略

    通過一個Load的Demo

public void testLoad1(){	Session session = null;	try{		session = HibernateUtils.getSession();		session.beginTransaction();		//(1)		Classes classes = (Classes)session.load(Classes.class, 1);		//(2)		System.out.println("Classes.name=" + classes.getName());		//(3)		Set students = classes.getStudents();		//(4)		for(Iterator iter=students.iterator(); iter.hasNext();){			Student student = (Student)iter.next();			System.out.println("student.name=" + student.getName());		}		session.getTransaction().commit();	}catch(Exception e){		e.printStackTrace();		session.getTransaction().rollback();	}finally{		HibernateUtils.closeSession(session);	}}          如上,代碼中標記了(1)(2)(3)(4)共計4條測試語句,默認的hbm.xml配置中,對<set>的lazy形式也是“true”,當調用testLoad1()的時候,

    不會發出sql的有:(1)(3)

    會發出Sql的有:(2)(4)

    做到了,真正的 只有在使用的時候,才會加載,即體現出lazy加載的一個好處。

    然而對于lazy="true"有一個影響效率性能的地方,參考這個demo:

public void testLoad2(){	Session session = null;	try{		session = HibernateUtils.getSession();		session.beginTransaction();		//不會發出sql		Classes classes = (Classes)session.load(Classes.class, 1);		//會發出sql		System.out.println("Classes.name=" + classes.getName());		//不會發出sql		Set students = classes.getStudents();		//會發出查詢該班級全部學生的sql語句,存在效率問題		System.out.println("count=" + students.size());				session.getTransaction().commit();	}catch(Exception e){		e.printStackTrace();		session.getTransaction().rollback();	}finally{		HibernateUtils.closeSession(session);	}}           將for循環替換為查詢students.size();使用lazy="true"策略,加載過程中,對size的查詢雖然支持lazy,但是發出的sql語句是select * from t_table,改善如下:    將lazy="true"修改為lazy="extra",此時發出的sql語句為"select count(*) from t_table",提升了效率,同時extra繼承了true的所有優點,對<set>最好使用lazy="extra",當然使用lazy="false",肯定就不支持集合的延遲加載了。

    附注:<class>上的lazy策略,影響的僅僅是<property>這類普通屬性,對于<set>/<list>沒有影響。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产91在线高潮白浆在线观看| 456亚洲影院| 久久精品一区中文字幕| 亚洲在线第一页| 亚洲级视频在线观看免费1级| 亚洲偷欧美偷国内偷| 亚洲乱码一区二区| 欧美另类极品videosbestfree| 日韩精品999| 国产精品美乳一区二区免费| 国内精品视频一区| 91成人免费观看网站| 久久久av网站| 色综合色综合网色综合| 91久久久久久久久久| 亚洲国产美女精品久久久久∴| 亚洲第一级黄色片| 九九热99久久久国产盗摄| 亚洲欧洲黄色网| 热99精品里视频精品| 久久久久久久久国产| 欧美黑人一区二区三区| 色系列之999| 国产精品欧美激情| 欧美一级视频在线观看| 精品国产91乱高清在线观看| 成人免费在线视频网站| 亚洲福利在线视频| 亚洲欧洲高清在线| 在线成人激情视频| www.欧美精品一二三区| 日韩美女免费线视频| 这里只有精品视频| 国产精品视频在线播放| 国产精品久久久久福利| 国产精品久久999| 亚洲色图欧美制服丝袜另类第一页| 亚洲影影院av| 国产日本欧美在线观看| 2018日韩中文字幕| 欧美疯狂性受xxxxx另类| 国产精欧美一区二区三区| 国产成人在线视频| 亚洲精品xxx| 在线精品91av| 国产视频欧美视频| 欧美成年人视频网站欧美| 亚洲精品免费在线视频| 亚洲美女福利视频网站| 亚洲精品国产精品国自产观看浪潮| 欧美日韩精品国产| 欧美日本高清视频| 久久精品视频一| 欧美裸体xxxx极品少妇| 精品一区二区三区电影| 国产精品91视频| 午夜精品久久久久久久久久久久久| 亚洲国语精品自产拍在线观看| 国产精品狼人色视频一区| 欧美成人精品在线观看| 精品亚洲永久免费精品| 久久精品成人一区二区三区| 欧美极品在线播放| 国产精品日韩精品| 亚洲精品av在线播放| 国产欧美 在线欧美| 在线看片第一页欧美| 久久天天躁狠狠躁老女人| 国产精品国语对白| 日韩av观看网址| 爱福利视频一区| 国产va免费精品高清在线| 久久综合五月天| 2019日本中文字幕| 在线播放国产一区二区三区| 精品国产福利视频| 7m第一福利500精品视频| 日韩在线观看电影| 在线观看国产欧美| 亚洲成人精品视频在线观看| 欧美高清视频在线观看| 中文字幕亚洲欧美在线| 国产在线视频91| 欧美国产在线视频| 亚洲女人天堂色在线7777| 国产又爽又黄的激情精品视频| 国产精品最新在线观看| 欧美一区二区视频97| 欧美午夜宅男影院在线观看| 亚洲成人久久网| 欧美人成在线视频| 国产精品丝袜白浆摸在线| 欧美精品久久久久久久久| 精品久久中文字幕久久av| 久久亚洲精品国产亚洲老地址| 国内精品伊人久久| 国产成人精品电影久久久| 亚洲精品视频播放| 久久久久久这里只有精品| 成人精品久久久| 日本成人黄色片| 亚洲日本成人女熟在线观看| 日韩精品免费在线观看| xxxxx91麻豆| 日韩精品欧美国产精品忘忧草| 久久亚洲精品一区| 最近2019中文字幕mv免费看| 亚洲黄色免费三级| 欧美床上激情在线观看| 亚洲国产精品电影在线观看| 2019精品视频| 日韩精品中文字幕视频在线| 亚洲自拍偷拍视频| 国产精品2018| 久久99热精品这里久久精品| 国产精品老女人视频| 26uuu久久噜噜噜噜| 91精品在线看| 日韩欧美999| 欧洲中文字幕国产精品| 久久精品视频中文字幕| 欧美成年人网站| 精品久久久久人成| 亚洲欧美日韩在线高清直播| 国产精品69久久久久| 欧美成人h版在线观看| 久久久综合免费视频| 欧美成人黑人xx视频免费观看| 国产精品久久久久久搜索| 日韩美女中文字幕| 精品久久久视频| 日韩精品电影网| 日韩av有码在线| 亚洲天堂男人天堂| 日韩在线视频观看| 欧美性xxxx极品hd满灌| 亚洲一区二区三区视频| 欧美与黑人午夜性猛交久久久| 国产精品中文字幕久久久| 国产在线久久久| 97精品视频在线播放| 久久久www成人免费精品张筱雨| 中日韩美女免费视频网址在线观看| 国产精品极品美女在线观看免费| 久久久国产精彩视频美女艺术照福利| 国产视频精品一区二区三区| 久久99精品久久久久久琪琪| 亚洲第一福利网站| 久久资源免费视频| 日韩精品视频中文在线观看| 亚洲精品视频播放| 日韩综合中文字幕| 国内精品免费午夜毛片| 国产精品久久色| 美女啪啪无遮挡免费久久网站| 亚洲伊人成综合成人网| 国产一区二区三区视频在线观看| 亚洲成年人在线播放| 国产欧美精品一区二区三区介绍| 一个人看的www久久| 91视频国产高清| 国产成人精品久久久| 欧美极品少妇xxxxⅹ喷水| 欧美在线观看一区二区三区|