hibernate工作原理:
1、調(diào)用Configuration類(lèi),通過(guò)Configuration config = new Configuration().configure();讀取并解析hibernate.cfg.xml配置文件
2、通過(guò)hibernate.cfg.xml中的<mapping resource="com/xxx/Xxx.hbm.xml"/>讀取并解析映射信息
3、通過(guò)SessionFactory sessionfactory = config.buildSessionFactory();通過(guò)讀取的這些配置信息創(chuàng)建一個(gè)sessionfactory對(duì)象
4、Session session = sessionfactory.openSession();通過(guò)sessionfactory生成一個(gè)Sesssion對(duì)象
5、Transaction ts = session.beginTransaction();通過(guò)session對(duì)象創(chuàng)建并啟動(dòng)事務(wù)Transation
6、通過(guò)Session對(duì)象的get()、sava()、update()、delete()和saveOrupdate()等方法對(duì)PO進(jìn)行加載,保存,更新,刪除等操作;
7、在查詢(xún)的情況下,可通過(guò)Session對(duì)象生成一個(gè)Query對(duì)象,然后利用Query對(duì)象執(zhí)行查詢(xún)操作。如果沒(méi)有異常,Transaction對(duì)象將提交這些操作結(jié)果到數(shù)據(jù)庫(kù)中,否則會(huì)回滾事務(wù)。
這里寫(xiě)圖片描述
1. Hibernate通過(guò)將數(shù)據(jù)在內(nèi)存和磁盤(pán)之間來(lái)回傳輸,并將數(shù)據(jù)存儲(chǔ)在緩存和頁(yè)面文件中來(lái)進(jìn)行記憶。2. Hibernate還會(huì)使用一些算法來(lái)確定哪些數(shù)據(jù)需要更頻繁地訪問(wèn)和哪些不需要,從而提高記憶效率和速度。3. 此外,開(kāi)發(fā)人員可以通過(guò)配置緩存和頁(yè)面文件的大小和清理策略等參數(shù)來(lái)優(yōu)化Hibernate的記憶能力,從而更好地適應(yīng)應(yīng)用程序的需要。
hibernate漢化中文步驟如下
1.啟動(dòng)hibernate項(xiàng)目,自動(dòng)創(chuàng)建表。
<property name="hibernate.hbm2ddl.auto">update</property>
插入數(shù)據(jù)之后發(fā)現(xiàn)寫(xiě)入表里的數(shù)據(jù)里的中文是亂碼。
2.修改數(shù)據(jù)庫(kù)的字符集為UTF-8,在MySQL安裝目錄下找到my.ini,將里面的default-character-set=latin1 改為default-character-set=UTF8,然后重起mysql服務(wù)即可將數(shù)據(jù)庫(kù)默認(rèn)字符集改為utf8。
3.回到項(xiàng)目的hibernate的配置文件hibernate.cfg.xml里修改name為“hibernate.connection.url"的property的值為:
<propertyname="hibernate.connection.url">jdbc:mysql:///crm?useUnicode=true&characterEncoding=UTF-8</property>
4.然后啟動(dòng)項(xiàng)目,執(zhí)行代碼,插入的中文就不會(huì)是亂碼了。
首先Hibernate不是MVC框架,準(zhǔn)確來(lái)說(shuō)是ORM框架。Hibernate的作用完全可以從ORM(Object Relation Mapping)的意思中體現(xiàn)出來(lái)。Hibernate工作就是將數(shù)據(jù)庫(kù)中的關(guān)系型數(shù)據(jù)映射成Java對(duì)象。說(shuō)白了就是方便開(kāi)發(fā)者使用Java來(lái)對(duì)關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行操作的,這里的重點(diǎn)是關(guān)系型數(shù)據(jù)庫(kù),和Nosql種種并無(wú)半毛錢(qián)關(guān)系。優(yōu)點(diǎn):
有自己的Hql語(yǔ)句,對(duì)sql進(jìn)行了一定的封裝;
各種關(guān)系型數(shù)據(jù)庫(kù)基本都能支持;
開(kāi)發(fā)難度低;
各方面都比較成熟完善,包括事務(wù)、緩存等一些ORM該有的東西它都有;
缺點(diǎn):數(shù)據(jù)量大的時(shí)候,Hibernate就虛了,尤其是delete和update操作
在 Java 開(kāi)發(fā)領(lǐng)域,使用 Hibernate 是一種常見(jiàn)且強(qiáng)大的選擇。Hibernate 是一個(gè)開(kāi)源的 ORM(對(duì)象關(guān)系映射)框架,可以輕松地將 Java 對(duì)象與數(shù)據(jù)庫(kù)進(jìn)行交互。它提供了一種簡(jiǎn)單而高效的方法來(lái)處理持久化層的任務(wù),使開(kāi)發(fā)人員能夠?qū)W⒂跇I(yè)務(wù)邏輯而不必過(guò)于關(guān)心數(shù)據(jù)庫(kù)操作的細(xì)節(jié)。
在本文中,我們將深入探索 Hibernate 文檔,了解其主要特性和使用方法。讓我們開(kāi)始這次有趣的旅程!
Hibernate 是一個(gè)用于 Java 平臺(tái)的 ORM 框架,簡(jiǎn)化了開(kāi)發(fā)人員與數(shù)據(jù)庫(kù)之間的交互。它通過(guò)將 Java 對(duì)象映射到數(shù)據(jù)庫(kù)表和 SQL 查詢(xún),提供了一種面向?qū)ο蟮臄?shù)據(jù)庫(kù)訪問(wèn)方法。Hibernate 充分利用了 Java 中的注解和反射機(jī)制,從而簡(jiǎn)化了開(kāi)發(fā)過(guò)程,并提供了對(duì)跨數(shù)據(jù)庫(kù)平臺(tái)的支持。
Hibernate 的核心思想是對(duì)象關(guān)系映射,它將數(shù)據(jù)庫(kù)中的表映射為 Java 對(duì)象,并自動(dòng)處理關(guān)系和數(shù)據(jù)持久化。這使得開(kāi)發(fā)人員不必編寫(xiě)復(fù)雜的 SQL 查詢(xún)和手動(dòng)管理對(duì)象與數(shù)據(jù)庫(kù)之間的映射。
下面是 Hibernate 框架的一些重要特性:
現(xiàn)在讓我們來(lái)了解一下如何使用 Hibernate 來(lái)實(shí)現(xiàn)數(shù)據(jù)持久化。下面是使用 Hibernate 的基本步驟:
使用 Hibernate 進(jìn)行數(shù)據(jù)持久化可以大大簡(jiǎn)化開(kāi)發(fā)過(guò)程,并提高應(yīng)用程序的可維護(hù)性。它使開(kāi)發(fā)人員能夠使用面向?qū)ο蟮姆绞絹?lái)處理數(shù)據(jù)庫(kù)操作,從而使代碼更加清晰和易于理解。
盡管 Hibernate 提供了很多便利的功能,但如果不正確使用,也可能產(chǎn)生性能問(wèn)題。下面是一些優(yōu)化 Hibernate 性能的技巧:
通過(guò)合理優(yōu)化和配置,可以充分發(fā)揮 Hibernate 的優(yōu)勢(shì),提高應(yīng)用程序的性能和響應(yīng)速度。
本文深入探索了 Hibernate 文檔,并介紹了 Hibernate 的主要特性、使用方法和性能優(yōu)化技巧。Hibernate 是一個(gè)強(qiáng)大而靈活的 ORM 框架,可以極大地簡(jiǎn)化 Java 開(kāi)發(fā)中的數(shù)據(jù)庫(kù)操作。
希望本文對(duì)你理解 Hibernate 的工作原理和使用方法有所幫助。通過(guò)學(xué)習(xí)和應(yīng)用 Hibernate,你將能夠在項(xiàng)目開(kāi)發(fā)中更高效地進(jìn)行數(shù)據(jù)持久化操作。
簡(jiǎn)單來(lái)說(shuō),前者屬于前臺(tái)框架,后者屬于數(shù)據(jù)庫(kù)相關(guān)的框架!
Hibernate是一個(gè)開(kāi)放源代碼的對(duì)象關(guān)系映射框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,使得Java程序員可以隨心所欲的使用對(duì)象編程思維來(lái)操縱數(shù)據(jù)庫(kù)。 Hibernate可以應(yīng)用在任何使用JDBC的場(chǎng)合,既可以在Java的客戶(hù)端程序使用,也可以在Servlet/JSP的Web應(yīng)用中使用,最具革命意義的是,Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。
mybatis與hibernate一樣是個(gè)orm數(shù)據(jù)庫(kù)框架。它與hibernate區(qū)別是非常大的,有以下幾點(diǎn):
總結(jié)起來(lái):
mybatis:小巧、方便、高效、簡(jiǎn)單、直接、半自動(dòng)
hibernate:強(qiáng)大、方便、高效、復(fù)雜、繞彎子、全自動(dòng)
1. hibernate是全自動(dòng),而mybatis是半自動(dòng)。
hibernate完全可以自動(dòng)生成sql。而mybatis僅有基本的字段映射,仍然需要通過(guò)手寫(xiě)sql來(lái)實(shí)現(xiàn)和管理。
2. hibernate數(shù)據(jù)庫(kù)移植性遠(yuǎn)大于mybatis。
hibernate通過(guò)它強(qiáng)大的映射結(jié)構(gòu)和hql語(yǔ)言,大大降低了對(duì)象與數(shù)據(jù)庫(kù)(oracle、mysql等)的耦合性,而mybatis由于需要手寫(xiě)sql,移植性也會(huì)隨之降低很多,成本很高。
3. hibernate擁有完整的日志系統(tǒng),mybatis則欠缺一些。
hibernate日志系統(tǒng)非常健全,涉及廣泛,而mybatis則除了基本記錄功能外,功能薄弱很多。
4. mybatis相比hibernate需要關(guān)心很多細(xì)節(jié)
hibernate配置要比mybatis復(fù)雜的多,學(xué)習(xí)成本也比mybatis高。但也正因?yàn)閙ybatis使用簡(jiǎn)單,才導(dǎo)致它要比hibernate關(guān)心很多技術(shù)細(xì)節(jié)。mybatis由于不用考慮很多細(xì)節(jié),開(kāi)發(fā)模式上與傳統(tǒng)jdbc區(qū)別很小,hibernate則正好與之相反。但是如果使用hibernate很熟練的話,實(shí)際上開(kāi)發(fā)效率絲毫不差于甚至超越mybatis。
5. sql直接優(yōu)化上,mybatis要比hibernate方便很多
由于mybatis的sql都是寫(xiě)在xml里,因此優(yōu)化sql比hibernate方便很多。而hibernate的sql很多都是自動(dòng)生成的,無(wú)法直接維護(hù)sql;總之寫(xiě)sql的靈活度上hibernate不及mybatis。
mybatis:
1. 入門(mén)簡(jiǎn)單,即學(xué)即用,提供了數(shù)據(jù)庫(kù)查詢(xún)的自動(dòng)對(duì)象綁定功能。
2. 可以進(jìn)行更為細(xì)致的SQL優(yōu)化,可以減少查詢(xún)字段。
3. 缺點(diǎn)就是框架還是比較簡(jiǎn)陋,功能尚有缺失,雖然簡(jiǎn)化了數(shù)據(jù)綁定代碼,但是整個(gè)底層數(shù)據(jù)庫(kù)查詢(xún)實(shí)際還是要自己寫(xiě)的,工作量也比較大,而且不太容易適應(yīng)快速數(shù)據(jù)庫(kù)修改。
4.二級(jí)緩存機(jī)制不佳。
hibernate:
1. 功能強(qiáng)大,數(shù)據(jù)庫(kù)無(wú)關(guān)性好,O/R映射能力強(qiáng)。
2. 有更好的二級(jí)緩存機(jī)制,可以使用第三方緩存。
3. 缺點(diǎn)就是學(xué)習(xí)門(mén)檻不低,要精通門(mén)檻更高,而且怎么設(shè)計(jì)O/R映射,在性能和對(duì)象模型之間如何權(quán)衡取得平衡,以及怎樣用好Hibernate方面需要你的經(jīng)驗(yàn)和能力都很強(qiáng)才行。
舉個(gè)形象的比喻:
mybatis:機(jī)械工具,使用方便,拿來(lái)就用,但工作還是要自己來(lái)作
hibernate:智能機(jī)器人,但研發(fā)它(學(xué)習(xí)、熟練度)的成本很高,工作都可以擺脫他了,但僅限于它能做的事。
Hibernate 是一個(gè)廣泛使用的 Java ORM(對(duì)象關(guān)系映射)框架,它簡(jiǎn)化了開(kāi)發(fā)人員與關(guān)系型數(shù)據(jù)庫(kù)的交互過(guò)程。通過(guò) Hibernate,開(kāi)發(fā)人員能夠以面向?qū)ο蟮姆绞讲倏v數(shù)據(jù)庫(kù),而無(wú)需直接編寫(xiě) SQL 語(yǔ)句。Hibernate 提供了一種高效且可靠的數(shù)據(jù)庫(kù)訪問(wèn)解決方案,深受企業(yè)應(yīng)用程序開(kāi)發(fā)人員的青睞。
Hibernate 是由 Gavin King 和他的團(tuán)隊(duì)開(kāi)發(fā)的持久化框架。它是開(kāi)源的,并且基于標(biāo)準(zhǔn)的 Java Persistence API(JPA)。Hibernate 的工作原理是將 Java 對(duì)象映射到數(shù)據(jù)庫(kù)表,從而實(shí)現(xiàn)對(duì)象與關(guān)系數(shù)據(jù)庫(kù)之間的轉(zhuǎn)換。
Hibernate 提供了強(qiáng)大的特性,如自動(dòng)事務(wù)管理、數(shù)據(jù)庫(kù)連接池、緩存管理等。它還具有對(duì)延遲加載、查詢(xún)優(yōu)化以及透明事務(wù)處理的支持。Hibernate 的目標(biāo)是使數(shù)據(jù)庫(kù)操作盡可能簡(jiǎn)單,以便開(kāi)發(fā)人員能夠?qū)W⒂跇I(yè)務(wù)邏輯而不是數(shù)據(jù)庫(kù)細(xì)節(jié)。
使用 Hibernate 可以大大簡(jiǎn)化數(shù)據(jù)庫(kù)訪問(wèn)層的開(kāi)發(fā)工作。以下是一些選擇 Hibernate 的理由:
在學(xué)習(xí) Hibernate 時(shí),官方文檔是最重要的學(xué)習(xí)資源之一。Hibernate 提供了完善的官方文檔,詳細(xì)介紹了框架的各個(gè)特性和用法。
官方文檔主要有三個(gè)版本:3.x、4.x 和 5.x。每個(gè)版本都有詳細(xì)的說(shuō)明,包括概念解釋、API 文檔、示例代碼等。開(kāi)發(fā)人員可以根據(jù)自己使用的 Hibernate 版本,選擇對(duì)應(yīng)的文檔進(jìn)行學(xué)習(xí)。
除了官方文檔,還有一些優(yōu)秀的第三方資源可以幫助開(kāi)發(fā)人員更好地理解和使用 Hibernate。以下是一些值得參考的資源:
學(xué)習(xí) Hibernate 需要掌握一些基礎(chǔ)知識(shí),如面向?qū)ο缶幊獭㈥P(guān)系數(shù)據(jù)庫(kù)、SQL 語(yǔ)言等。如果您已經(jīng)熟悉這些基礎(chǔ)知識(shí),可以按照以下步驟學(xué)習(xí) Hibernate:
通過(guò)系統(tǒng)學(xué)習(xí)和實(shí)踐,您將逐漸掌握 Hibernate 的使用技巧和開(kāi)發(fā)經(jīng)驗(yàn)。掌握 Hibernate 可以為您的項(xiàng)目開(kāi)發(fā)帶來(lái)便利,并提高開(kāi)發(fā)效率。
Hibernate 是一個(gè)強(qiáng)大且成熟的框架,通過(guò)它,開(kāi)發(fā)人員可以以面向?qū)ο蟮姆绞絹?lái)操作數(shù)據(jù)庫(kù),從而簡(jiǎn)化了開(kāi)發(fā)工作。學(xué)習(xí) Hibernate 需要一定的時(shí)間和精力,但掌握它將為您的開(kāi)發(fā)工作帶來(lái)巨大的收益。
如果您對(duì)關(guān)系數(shù)據(jù)庫(kù)操作有需求,尤其是在 Java 項(xiàng)目中,那么 Hibernate 是一個(gè)非常值得學(xué)習(xí)和使用的框架。憑借其豐富的特性和廣泛的社區(qū)支持,Hibernate 已經(jīng)成為 Java 開(kāi)發(fā)人員的首選框架之一。
在Spring Service中,如果完全使用Hibernate 進(jìn)行操作,那么只有在事務(wù)結(jié)束時(shí)都會(huì)按順序刷新所有語(yǔ)句的結(jié)果到數(shù)據(jù)庫(kù),但如果事務(wù)中存在原始SQL語(yǔ)句,那么執(zhí)行順序就會(huì)出現(xiàn)問(wèn)題,原始SQL的執(zhí)行會(huì)在hibernat語(yǔ)句之前,解決方法是在hibernate的session中使用session.flush()將數(shù)據(jù)刷到數(shù)據(jù)庫(kù)中。