您好,登錄后才能下訂單哦!
Hibernate工作原理及為什么要用?
原理:
1.通過Configuration().configure();讀取并解析hibernate.cfg.xml配置文件
2.由hibernate.cfg.xml中的<mapping resource="com/xx/User.hbm.xml"/>讀取并解析映射信息
3.通過config.buildSessionFactory();//創(chuàng)建SessionFactory
4.sessionFactory.openSession();//打開Sesssion
5.session.beginTransaction();//創(chuàng)建事務Transation
6.persistent operate持久化操作
7.session.getTransaction().commit();//提交事務
8.關閉Session
9.關閉SesstionFactory
為什么要用:
1. 對JDBC訪問數(shù)據(jù)庫的代碼做了封裝,大大簡化了數(shù)據(jù)訪問層繁瑣的重復性代碼。
2. Hibernate是一個基于JDBC的主流持久化框架,是一個優(yōu)秀的ORM實現(xiàn)。他很大程度的簡化DAO層的編碼工作
3. hibernate使用Java反射機制,而不是字節(jié)碼增強程序來實現(xiàn)透明性。
4. hibernate的性能非常好,因為它是個輕量級框架。映射的靈活性很出色。它支持各種關系數(shù)據(jù)庫,從一對一到多對多的各種復雜關系。
2. Hibernate是如何延遲加載?
1. Hibernate2延遲加載實現(xiàn):a)實體對象 b)集合(Collection)
2. Hibernate3 提供了屬性的延遲加載功能
當Hibernate在查詢數(shù)據(jù)的時候,數(shù)據(jù)并沒有存在與內(nèi)存中,當程序真正對數(shù)據(jù)的操作時,對象才存在與內(nèi)存中,就實現(xiàn)了延遲加載,他節(jié)省了服務器的內(nèi)存開銷,從而提高了服務器的性能。
3.Hibernate中怎樣實現(xiàn)類之間的關系?(如:一對多、多對多的關系)
類與類之間的關系主要體現(xiàn)在表與表之間的關系進行操作,它們都市對對象進行操作,我們程序中把所有的表與類都映射在一起,它們通過配置文件中的many-to-one、one-to-many、many-to-many、
4. 說下Hibernate的緩存機制
1. 內(nèi)部緩存存在Hibernate中又叫一級緩存,屬于應用事物級緩存
2. 二級緩存:
a) 應用及緩存
b) 分布式緩存
條件:數(shù)據(jù)不會被第三方修改、數(shù)據(jù)大小在可接受范圍、數(shù)據(jù)更新頻率低、同一數(shù)據(jù)被系統(tǒng)頻繁使用、非 關鍵數(shù)據(jù)
c) 第三方緩存的實現(xiàn)
一級緩存:session級的緩存也叫事務級的緩存,只緩存實體,生命周期和session一致。不能對其進行管理。
不用顯示的調(diào)用。
二級緩存:sessionFactory緩存,也叫進程級的緩存,使用第3方插件實現(xiàn)的,也值緩存實體,生命周期和sessionFactory一致,可以進行管理。
首先配置第3放插件,我們用的是EHCache,在hibernate.cfg.xml文件中加入
<property name="hibernate.cache.user_second_level_cache">true</property>
在映射中也要顯示的調(diào)用,<cache usage="read-only"/>
二級緩存之查詢緩存:對普通屬性進行緩存。如果關聯(lián)的表發(fā)生了修改,那么查詢緩存的生命周期也結束了。
在程序中必須手動啟用查詢緩存:query.setCacheable(true);/////////
5. Hibernate的查詢方式
Sql、Criteria,object comptosition
Hql:
1、 屬性查詢
2、 參數(shù)查詢、命名參數(shù)查詢
3、 關聯(lián)查詢
4、 分頁查詢
5、 統(tǒng)計函數(shù)
6. 如何優(yōu)化Hibernate?
1.使用雙向一對多關聯(lián),不使用單向一對多
2.靈活使用單向一對多關聯(lián)
3.不用一對一,用多對一取代
4.配置對象緩存,不使用集合緩存
5.一對多集合使用Bag,多對多集合使用Set
6. 繼承類使用顯式多態(tài)
7. 表字段要少,表關聯(lián)不要怕多,有二級緩存撐腰
1.Hibernate有哪幾種查詢數(shù)據(jù)的方式
(1)導航對象圖查詢
(2)OID查詢
(3)HQL
(4)QBC
(5)本地SQL
2.load()和get()的區(qū)別
load加載方法:
Java代碼
Users user = (Users)session.load(Users.class, userId); Users user = (Users)session.load(Users.class, userId);
get加載方法:
Java代碼
Users user = (Users)session.get(Users.class, userId); Users user = (Users)session.get(Users.class, userId);
兩加載方法區(qū)別:
區(qū)別1:如果數(shù)據(jù)庫中,沒有userId的對象。如果通過get方法加載,則返回的是一個null;如果通過load加載,則返回一個代理對象,如果后面代碼如果調(diào)用user對象的某個屬性(比如user.getPassword())會拋出異常:org.hibernate.ObjectNotFoundException;
區(qū)別2:load支持延遲加載,get不支持延遲加載。
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持億速云!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。