hibernate學習筆記

2023-01-31 04:57:06 字數 4014 閱讀 4062

表示層(struts處於表示層)、業務層(spring)、持久層(hibernate讓物件冬眠)、資料庫

hibernate (不要管表或是觸發器等)

apache ojb

sun jdo

oracle toplink

ejb(cmp<>)、jpa

ibatis《對sql進行配置【基於sql對映】>【更輕量級】

有物件導向的資料庫但使用不廣泛,如果使用廣泛以上的框架將沒有存在的意義

hibernate有兩種配置檔案.properties和.xml

configuration cg = new configuration();//這裡預設呼叫.properties

configuration cfg = new configuration().configure();//讀取檔案,如果這裡檔名是時configure(「

不想看到client j**a**執行的詳細資訊可以將中將一些資訊用#進行注釋

stdout這條不能注釋

檔案中為了方便跟蹤true這樣就可以顯示sql語句

hibernate不適合聚集專案開發(批量的查詢,批量的刪除,批量的修改等等),第

二、如果使用特定的資料庫優化機制(特定的sql優化,它是依賴於資料庫)就不適合了(sql是hibenate 自動生成的是無法控制的) 領域物件儲存過程

hibernate的優點

1、提高生產力(不要寫jdbc語句)

2、開發更物件化

3、移植性好(介面卡的配置)

4、支援透明持久化(即傾入性比較少,換其他框架比較方便【輕量級框架】{spring也是輕量級的})不依賴於容器,測試方便

hibernate 是用log4j進行日誌記錄的(將拷貝到專案中,這樣會更好跟蹤hibernate的一些細節、更容易進行除錯,沒有的話,控制出錯它是不會進行列印的)

乙個資料庫對應乙個sessionfactory(表,對映都放在這裡面)

sessionfactory(重量級【建立比較耗時,最好只建立一次,避免多次建立】,執行緒安全)與二級快取(程序級的快取)有關

hibernate預設實現了連線池,還可以繼承第三方的連線池

session 可以認為是對connection做了一層包裝

當你opensession()時,並不代表它就open了乙個connection

只有真正用的時候它才會去拿connection(它會到連線池裡面拿[在配置檔案中我們並沒有看到連線池的配置,因為,還可以整合第三方(比如ddcp【就是tomcat所使用的】)的連線池

}])session這裡面管理了,而connection僅僅就是乙個連線,所以學hibernate就得學快取

就比如s**e乙個物件的時候,先放到快取乙份(對實體物件生命週期的管理)

session用完必須關閉(乙個業務請求開啟乙個session。session關閉事務也關閉),session是非執行緒安全的

application

hibernate

database

hiberante核心介面

jndi (j**a名稱和目錄介面)是主要是管理我們物件的,特別是ejb應用,它會把ejb都放在jndi這棵樹上,它就像乙個**簿一樣,乙個人的姓名對應著他的乙個**,它就是這樣管理的,乙個友好字串對應乙個例項,那麼都在這裡面管理,我講的是tomcat連線池,也是這種方式來做的。

使用它的好處:1,我們的物件可以統一管理2,我們可以不依賴於具體的實現。

jdbc 從事務看,它屬於本地事務(指只能對乙個資料庫進行操作)(比如不能進行銀行轉賬)[drp資料庫]

jta(j**a transation api【其實是乙個容器】)全域性事務使用它我們才具體跨資源的事務能力,它實現了兩階段提交協議(只有在提交之前沒有任何問題,才有事務提交,有問題就回滾)

這裡可以知道hibernate可以使用jta事務,jdbc,也可以訪問jndi資料來源

query介面支援hql(查詢實體類,這裡是不同資料庫的介面卡)、sql(查詢表)

lifecycle(介面不建議使用,有傾入性

inteceptor介面代替lifesycle的作用,如果你想拿到比如s**e前和後的一些事件,沒有傾入性

usertype 與資料庫之間型別轉化,覺得hibernate的轉化不適合你的要求,你也可以自己配置

比如說乙個人有十個郵箱,hibernate是通過兩張表進行儲存的,但我們想讓這是個郵箱以「,」隔開存在乙個欄位上

持久化物件的生命週期(lifecycle)

瞬時物件(transient objects)

持久化物件(persist objects)

離線物件(detached objects)

使用junit進行單元測試首先專案中建立source folder

session介面的基本用法及生命週期示例

session對應一級快取

了解hibernate的crud操作(s**e,update,delete,get,load等)

了解get和load的區別

1、 get不支援lazy,load支援lazy(是指在使用時才會載入物件《才會向資料傳送請求生成sql語句》)

2、 採用get載入資料,如果沒有匹配的資料,返回null,而load則丟擲異常

transient狀態的特徵

1、 在資料庫中沒有與之匹配的資料

2、 沒有納入session的管理

persistent狀態的特徵

1、 persistent狀態的物件在資料庫有與之對應的資料

2、 納入了session的管理

3、 在清理快取(或髒資料的檢查)的時候,會和資料庫同步

清理快取判斷快取有沒有發生變化

detached狀態的特徵

1、 在資料中有與之匹配的資料

2、 沒有納入session的管理

query介面

query支援hql(hibernate查詢語言)語句

orm框架中都有自己的一套資料庫查詢語言,比如ejb,與之對應的ejbql

hibernate的分頁

hibernate解決了阻抗不匹配(物件中繼承,而關聯式資料庫沒有繼承)

oop、ooa、ood

基本對映標籤和屬性介紹

auto-import

package

主鍵生成策略

{uuid效率高,但字串的查詢肯定沒有數字(即自增的)的快

native資料庫要維護一張表來實現自增

上面兩種都可以

assigned}

實體類名、屬性名和sql的關鍵字重複,這樣是不允許的需要修改,使用table或column進行重新命名

比如:如果實體物件的名字為group,這是一定需要自己命名,因為group是資料庫的關鍵字

實體類的設計原則

1、 實現乙個預設的(即無引數的)構造方法(constructor)

2、 提供乙個標識屬性(identifier property)(可選){與業務無關的屬性標識}

3、 使用非final的類 (可選)

4、 為持久化欄位宣告訪問器(accessors){即是提供get,set方法}

多對一的關聯對映

關聯對映的本質

1、 將關聯關係對映到資料庫。所謂的關聯關係是物件模型在記憶體中的乙個或多個引用

會在多的一端加入乙個外來鍵,指向一的一端,這個外來鍵是由

中的column屬性定義的,如果忽略了這個屬性那麼預設的外來鍵與實體的屬性一致

1、理解級聯的含義

是物件的連鎖操作

一對一的關聯對映

單向:1、主鍵關聯

2、唯一外來鍵關聯

使用uuidhibernate生成主鍵,

因為user的主鍵生成策略採用的是uuid,所以呼叫完成s**e後,知識將user納入到了session的管理

不會發出insert語句,但是已經生成,session中的existsindatabase狀態為false

呼叫flush,hibernate會清理快取,執行sql

如果資料的隔離級別設定為未提交讀,那麼我們可以看到flush過的資料

並且session中的existsindatabase狀態為true;

師德學習筆記

教師的道德,是教育文化的深層內涵,也是乙個民族在教育活動中表現出來的富有強大生命力的優秀思想 崇高品德和堅定行動,是提高民族素質 培育民族精力的動力之源。青少年的健康成長是一項要全社會共同努力的體系工程,高素質的教師隊伍是這一工程順利實現的根本保證。教育心理學表明,任何學生身上都有閃光點,只是在於教...

家長學習筆記

一 經營友誼的對策 1.引導孩子結交好朋友。2.教育孩子自身要寬容,不以自我為中心。3.讓孩子了解什麼是真正的友誼,不要 哥們義氣 等等正確引導異性間的交往 異性間交往的原則有 1 讓孩子了解與異 往的原則 1 反對 男女授受不親 重視 男女有別 2 最好參加有男女生同時參加的群體活動。3 把握交往...

師德學習筆記

三 更新觀念 努力創新是師德的新發展 老師要從以 教 為出發點轉變為以學生的 學 為出發點,教為學服務,教不是統治學生學 代替學生學,而是啟發學生學 引導學生學。課堂要成為學生學習的用武之地,成為學生在教師指導下獲取知識 訓練能力 發展智力以及思想情操受到良好薰陶的場所。教師應是教練員,不是運動員,...