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

首頁 > 編程 > Java > 正文

關于Hibernate的一些學習心得總結

2019-11-26 16:01:40
字體:
來源:轉載
供稿:網友

對于Hibernate剛剛學習了一周時間了,作為一名java初學者,也有點自己的感受想分享出來,如果這篇文章能有幸被大家看到,也僅供大家娛樂。如果有什么不足之處,歡迎大家多多指點,多多批評。僅供參考,不喜勿噴。

前段時間剛學習了用JDBC來進行java和數據庫的連接,來實現對數據的持久化操作和增刪改查,但是學習完的感受就是JDBC過于繁瑣,因為它無法直接面對對象,開發效率地,代碼又多,還重復,完全不符合java面向對象的思維模式。Hibernate的誕生算是給java程序員很好地解決了這個問題,所以我們可以忘掉JDBC了,來看看Hibernate是如何實現java的持久化操作的。

Hibernate是一個優秀的Java 持久化層解決方案,是當今主流的對象―關系映射(ORM)工具。它的優勢有三點,第一:它是一個開發源代碼的對象關系映射框架;第二:對JDBC進行了非常輕量級的對象封裝, 簡化了JDBC 繁瑣的編碼;第三:將JavaBean對象和數據庫的表建立對應關系。ORM是持久化層的一種解決方案,它是將java中的類對象及相關屬性和相關類與數據庫中的表及表的屬性和鍵做相關的一一映射,來實現java對象和數據庫的聯系。下面我就來具體說說自己是如何學習Hibernate的。

一:hibernate入門
對于搭建項目框架編寫hibernate配置文件、實體映射文件我就不多說了。首先我們要先用Configuration接口來新建會話工廠,再從SessionFactory(會話工廠)里獲得會話實例(一般情況下,整個應用只有唯一的一個SessionFactory,它應該在應用初始化時被創建),然后獲取Session實例,用Session可以操作數據庫和類中的對象,用Transaction接口的commit()和roolback()方法來提交事務和回滾事物,用Query來對數據庫實現查詢(用SQL或HQL)。另外在對數據進行增刪改查操作時,Hibernate中的實體對象有三種對象:瞬時狀態,持久狀態,游離狀態。狀態不同,實現方法也不相同。大家可以自己慢慢體會。

二:關聯映射
既然Hibernate是關系映射工具,必然存在many-to-one,one-to-many,雙向一對多,many-to-many關聯。要實現這些操作,首先實體之間要有關聯關系,即通過一個對象持有另一個對象的實例。而在數據庫的表中,表的主外鍵也能實現表與表的關聯關系。然后我們就要把這些關聯關系在映射文件(hbm.xml)中體現出來。many-to-one是many的一端應持有one的一端的對象(引用),one-to-many是one的一端應持有many端的對象集合,雙向一對多就是同時配置了單向的一對多和單向的多對一,多對多關聯則是將多對多轉換成兩個一對多,而且為中間表建立實體類及映射文件,兩個端點和中間端分別建立雙向一對多關聯。

三:HQL實用技術
Hibernate支持兩種主要的查詢方式。HQL(Hibernate Query Languge,Hibernate 查詢語言)查詢是一種面向對象的查詢語言,其中沒有表和字段的概念,只有類、對象和屬性的概念,HQL 是應用較為廣泛的方式。Criteria 查詢又稱為“對象查詢”,它用面向對象的方式將構造查詢的過程做了封裝。

HQL相比與SQL更符合java面向對象思維,也更加簡單。HQL中沒有表和字段的概念,只有類、對象和屬性的概念。例如你要查詢名字中帶有“Spring”的一本書,SQL:select  * from books where book_name like ‘%Spring%'     HQL :from Book b where b.name like 'Spring%' SQL中用到的是數據庫中的表名books和字段book_name,而HQL中用到的是Book類名和Book的name屬性,而Book類和books表又是映射關系,所以相當于實現了數據庫的操作。是不是更加形象呢?

Criteria 查詢用的比較少,從Session中獲取Criteria實例,設定限制方法(用到Restrictions常用的查詢條件)。相當于把HQL語句轉化成一個個方法來實現查詢??醋约合埠冒?,反正我是覺得HQL更實用一些吧。

四:HQL中的延遲加載和Hibernate高速緩存
HQL和Criteria查詢過程中都會延遲加載,有人覺得這是Hibernate的一個缺陷,我覺得這更像是Hibernate的高明之處。在得到一個Session實例后,用Book為例,你用Session的get()方法得到一本Book,Book是主對象,而Book又有一個Type關聯對象,但是得到的Book對象不會加載Type關聯對象,只有在你需要用到Type關聯對象時才會強制加載Type關聯對象,具體來說就是關聯對象和關聯集合的默認加載計劃是:延遲加載,即加載主對象時它們不會被立即加載,而是直到使用這些對象和集合時才發送SQL語句、獲取數據、初始化對象和集合,而主對象的屬性默認是被立即加載的。當然這種方式也是可以強制改變的,在用Criteria查詢時,你可以在實體類的映射文件中來添加 lazy = “false”  來強制加載。不過不建議這種方式,因為會造成不必要的資源浪費,效率也極低。如果需要,我們可以在編寫代碼時強制加載效果會更好一些。

總之,這種延遲加載策略會簡化SQL語句,提高查詢效率。根據不同的用戶需要,也可以改變加載策略。

Hibernate緩存有一級緩存和二級緩存,對于一級緩存,其生命周期跟Session的生命周期一樣,所以也可以將Hibernate一級緩存稱為Session緩存。Hibernate一級緩存是一個強制的高速緩存。通過get()方法(load()方法也類似),我們可以得到一級緩存數據,再次查詢就不需要get()方法了,直接查詢數據對象就行。需要注意的是get()方法是通過id來加載的,而list()方法也會將查詢結果放置在一級緩存中,但是它不會去一級緩存中查找獲取數據,原因是list()方法不是通過id加載的,還有iterate方法,例如: Iterator<Seeker> iter = session.createQuery(“from **").iterate();  該語句只把ID的值放到迭代器中,當遍歷的時候,會根據ID的值再去數據庫中查。并且該語句會產生N+1次查詢。

至于二級緩存是由SessionFactory負責管理,所以也常將二級緩存稱為SessionFactory緩存。主要適用于不太重要的數據,所以也沒深入的了解。

一周的Hibernate課程學習就到此為止了,Hibernate的相關知識還很多,以后要多在實戰項目中運用才能更好地體會。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品日韩精品| 日韩av电影手机在线| 欧美黄色三级网站| 精品福利在线视频| 92裸体在线视频网站| 免费97视频在线精品国自产拍| 俺去啦;欧美日韩| 姬川优奈aav一区二区| 亚洲色图欧美制服丝袜另类第一页| 色av中文字幕一区| 操人视频在线观看欧美| 国产成人免费av电影| 国产精品第二页| 欧美又大又硬又粗bbbbb| 一区二区三区www| 久久人人爽人人爽人人片av高清| 欧美激情一二区| 国产精品精品一区二区三区午夜版| 国产精品免费小视频| 久久精品精品电影网| 成人免费观看49www在线观看| 精品在线小视频| 一区三区二区视频| 夜色77av精品影院| 在线播放国产一区二区三区| 国内免费精品永久在线视频| 国内外成人免费激情在线视频| 中国人与牲禽动交精品| 日韩精品在线看| 日韩性生活视频| 亚洲香蕉成视频在线观看| 亚洲一区二区在线| 欧美国产日韩精品| 欧美一级片久久久久久久| 麻豆精品精华液| 亚洲精品电影网在线观看| 欧美成人精品不卡视频在线观看| 久久免费少妇高潮久久精品99| 国产精品影院在线观看| 色噜噜国产精品视频一区二区| 色噜噜亚洲精品中文字幕| 亚洲精品欧美日韩| 国产精品一区二区三区在线播放| 琪琪第一精品导航| 操日韩av在线电影| 亚洲成人精品视频| 亚洲欧美国产精品久久久久久久| 日韩欧美亚洲国产一区| 7777免费精品视频| 精品久久中文字幕| 韩国福利视频一区| 热re99久久精品国产66热| 成人精品久久一区二区三区| 久久久久久久久久av| 国产精品久久久久久中文字| 高清欧美性猛交xxxx黑人猛交| 中国china体内裑精亚洲片| 51ⅴ精品国产91久久久久久| 国产激情视频一区| 精品亚洲国产成av人片传媒| 日韩中文第一页| 国产成人精品电影| 亚洲国产天堂久久综合网| 日韩精品高清在线观看| 中文字幕国内精品| 亚洲欧美资源在线| 欧美电影免费观看| 国产丝袜精品第一页| 久久久精品久久久久| 国产精品∨欧美精品v日韩精品| 69精品小视频| 欧美特级www| 欧美另类xxx| 国产精品香蕉av| 欧美激情一二三| 国产日韩欧美一二三区| 日韩精品视频在线播放| 欧美激情视频在线观看| 亚洲老头老太hd| 精品成人国产在线观看男人呻吟| 性欧美在线看片a免费观看| 91精品在线国产| 丝袜亚洲另类欧美重口| 亚洲аv电影天堂网| 国产专区欧美专区| 欧美亚洲日本黄色| 日韩在线观看免费全集电视剧网站| 国产精品美女主播| 欧美激情国内偷拍| 欧美亚洲在线视频| 日韩欧美aⅴ综合网站发布| 北条麻妃在线一区二区| 日韩在线观看网站| 精品视频在线播放色网色视频| 亚洲老头同性xxxxx| 亚洲国产另类 国产精品国产免费| 国产福利精品视频| 亚洲黄色片网站| 欧美激情国内偷拍| 91久久国产精品91久久性色| 国产色婷婷国产综合在线理论片a| 国产福利精品在线| 久久久久久网址| 亚洲在线观看视频| 国产精品视频26uuu| 热门国产精品亚洲第一区在线| 性欧美办公室18xxxxhd| 爱福利视频一区| 国产伦精品一区二区三区精品视频| 草民午夜欧美限制a级福利片| 精品国模在线视频| 欧美一区二区三区精品电影| 青青草精品毛片| 久久av资源网站| 欧美孕妇与黑人孕交| 亚洲国产高清福利视频| 欧美国产极速在线| 亚洲欧美在线一区| 免费av一区二区| 成人免费网站在线观看| 欧美日韩精品二区| 亚洲韩国日本中文字幕| 久久视频免费在线播放| 国产精品成人免费视频| 97在线视频免费观看| 欧美电影免费观看高清完整| 亚洲一区二区三区xxx视频| 亚洲a在线观看| 清纯唯美亚洲激情| 欧美性生活大片免费观看网址| 亚洲欧美国产精品va在线观看| 国产手机视频精品| 国产成人精品视| 日韩av在线一区二区| 日韩中文字幕精品| 色综合久久精品亚洲国产| 国产一区二区欧美日韩| 亚洲人午夜色婷婷| 亚洲国产精品中文| 国产精品久久久久久av| 国产精品久久久久久av| 91国产视频在线| 久国内精品在线| 国产一区二中文字幕在线看| 欧美人与性动交| 国产精品视频免费在线观看| 国产精品久久婷婷六月丁香| 中文字幕少妇一区二区三区| 日本精品视频在线播放| 国产精品露脸自拍| 久久久免费av| 久久久精品免费| 亚洲成色777777在线观看影院| 欧美日韩国产精品| 69视频在线免费观看| 亚洲大胆人体av| 97热在线精品视频在线观看| 国产精品久久久久久久久久东京| 日韩免费av片在线观看| 国产一区二区三区免费视频| 欧美另类xxx| 欧美午夜精品久久久久久久| 国语自产精品视频在线看抢先版图片| 68精品国产免费久久久久久婷婷|