Hibernate基礎(chǔ)知識(shí),談到這里,首先最重要的是應(yīng)該理解ORM,ORM是什么呢?3個(gè)單詞的縮寫,Object-Relation Mapping,既對(duì)象-關(guān)系映射的意思.這是一種模式,這種模式在單個(gè)組件中負(fù)責(zé)說(shuō)有實(shí)例業(yè)務(wù)對(duì)象的持久化,封裝了數(shù)據(jù)庫(kù)訪問(wèn)的細(xì)節(jié),這就是Hibernate的核心原理.ORC解決主要的問(wèn)題就是對(duì)象-關(guān)系映射.因?yàn)轫?xiàng)目的業(yè)務(wù)邏輯模型是面向?qū)ο蟮?而關(guān)系型數(shù)據(jù)模型是面向關(guān)系的,所以Hibernate把一個(gè)持久化的類和數(shù)據(jù)庫(kù)中的一張表對(duì)應(yīng),類的每一個(gè)實(shí)例對(duì)應(yīng)這個(gè)表的一條記錄.類的每一個(gè)屬性,對(duì)應(yīng)這表里的一個(gè)字段.這樣就把一個(gè)對(duì)象和一個(gè)關(guān)系型數(shù)據(jù)表映射在了一起,這就是ORM模式.
在Hibernate開發(fā)的文檔里,把Hibernate定義成了一種對(duì)JDBC做了輕量級(jí)封裝的對(duì)象-關(guān)系映射工具.所謂輕量級(jí)封裝就是指沒(méi)有完全的把JDBC封裝,我們的程序還可以繞過(guò)Hibernate層直接訪問(wèn)數(shù)據(jù)庫(kù).下面是Hbernate的幾個(gè)接口,其中前5個(gè)是核心接口,后3個(gè)是回調(diào)接口.
1)Configuration:配置Hibernate,啟動(dòng)Hibernate,創(chuàng)建SessionFactory工廠對(duì)象.
2)SessionFactory:初始化Hibernate,創(chuàng)建Session對(duì)象.它是線程安全的,就是說(shuō)可以多個(gè)線程共同操作這個(gè)對(duì)象,而且是重量級(jí)的,在緩存中存儲(chǔ)的大量的SQL語(yǔ)句和映射元素?cái)?shù)據(jù).所以這個(gè)對(duì)象我們不能輕易的創(chuàng)建和銷毀,一個(gè)數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)SessionFactor工廠對(duì)象.
3)Session:負(fù)責(zé)保存,修改,刪除,查詢和加載對(duì)象.這個(gè)Sessin不是線程安全的,所以我們要避免多個(gè)線程共享一個(gè)Session,這個(gè)Session是輕量級(jí)的,就是說(shuō)創(chuàng)建和銷毀這個(gè)Session不需要消耗太多的系統(tǒng)資源.
4)Transaction:事務(wù)管理.
5)Query:執(zhí)行數(shù)據(jù)庫(kù)查詢.Query接口包裝了一個(gè)HQL語(yǔ)句,和SQL語(yǔ)句很相似,但是HQL語(yǔ)句是面向?qū)ο蟮?它引用類名和屬性名,而不是表明和字段名.還有一個(gè)接口Criteria完全封裝了基于字符串形式的查詢語(yǔ)句,比Query接口更加面向?qū)ο?擅長(zhǎng)動(dòng)態(tài)的查詢.
6)Lifecycle:持久化類實(shí)現(xiàn)的接口,讓它的實(shí)例能響應(yīng)被加載,保存,刪除的事件.
7)Validatable:讓持久化類的實(shí)例保存之前進(jìn)行數(shù)據(jù)的驗(yàn)證,不過(guò)這個(gè)不推薦使用,因?yàn)閿?shù)據(jù)驗(yàn)證是業(yè)務(wù)邏輯層的事情,而且這種方式強(qiáng)迫持久化類必須實(shí)現(xiàn)Hibernate的特定接口,會(huì)影響持久化類的可移植性,因此不推薦使用.
8)Interceptor:Interceptor的實(shí)現(xiàn)類負(fù)責(zé)響應(yīng)持久化類的實(shí)例被加載,保存,刪除,更新等事件.
還有一個(gè)比較重要的接口Type映射類型接口,用于把對(duì)象中的屬性,映射為數(shù)據(jù)庫(kù)中的字段.Type接口提供了各種實(shí)現(xiàn)的類.他們代表了Hibernate的映射類型.
1)PrimitiveType類:原始映射類型,映射了JAVA的基本類型.包括ByteType,ShortTyep,IntegerType,LongType,DoubleType,CharacterType,BooleanTyep
2)DateType類:映射了JAVA的日期類型.
3)BinaryType類:映射了Byte[]數(shù)字類型.
這里,我們的應(yīng)用程序不必自己創(chuàng)建Type實(shí)例,而是通過(guò)Hibernate這個(gè)類,訪問(wèn)它的靜態(tài)Type實(shí)例.例如Hibernate.STRING的形式訪問(wèn)StringType實(shí)例.還可以實(shí)現(xiàn)UserType或者CompositeUserType這兩個(gè)接口,來(lái)定義用戶自己的映射類型.
還有一類接口是可擴(kuò)展接口,比如Hibernate的方言抽象類,指定緩存機(jī)制的Cache接口等等.這些因?yàn)槲乙恢币矝](méi)用到過(guò)所以就不在這里說(shuō)明了.想了解它的朋友可以查閱相關(guān)的資料.