標籤:
- 也用了這麼久的Hibernate和MyBatis了,一直打算做一個總結,就他們之間的優缺點說說我自己的理解:
- 首先,Hibernate是一個ORM的持久層架構,它使用對象和我們的資料庫建立關係,在Hibernate中,操作資料庫實際上時通過對象狀態的改變來改變資料中對應表的值,此時就是通過hql來操作資料庫的,就不在通過sql來直接操作我們的資料庫。
-
- 我認為,最能體現Hibernate的物件導向的方法來操作資料庫的一點,就是:在新建立一個對象後,在調用Hibernate的save方法時,此時HIbernate並不會發送插入資料的sql,而是等到我們的session重新整理,事務提交的時候,Hibernate才會發送一條插入資料的sql.這是因為,Hibernate是根據對象的狀態來更改其資料庫中對應的表的,上面所說的建立一個對象時,此時這個對象處於臨時狀態,而在調用了save方法之後,該對象就處於了持久化狀態,此後,當Hibernate進行session重新整理,事務提交後,就會將由臨時狀態變成了持久化狀態的這個對象持久化到資料庫中相應的表中。
- 具體的,對象的狀態分為:
- 對象剛被new出來,沒有id.
- 刪除狀態的對象的在session重新整理,事務提交之後,也是臨時狀態。(此時通過在hibernate.properties檔案中配置use_identifier_rollback可以是改對象的id為null)。
- 對象有id,並且被session管理。
-
- save方法將臨時對象或者游離對象變成持久化對象。
- get方法返回的時持久化的對象。
- load方法返回的是持久化對象。
- Query.list返回的是持久化對象。不過在大資料處理時需要即時清理緩衝。
- update將游離對象變成持久化對象。
-
-
- 對象有id,但是不處於session的管理之下。
-
- session.close將當前被關閉的session中的所有持久化對象全部變成游離對象。
- session.clear將當前被清理的session中的所有持久化對象全部變成游離對象。
- session.evict(Object)將指定對象變成游離對象。
- 刪除狀態:
- 對象有id,但是計劃被刪除。
-
- delete方法將持久化對象變成刪除狀態,但是需要在session重新整理,事務提交後才會更改到資料庫。
2.其次,MyBatis則時仍然是基於sql查詢的方式,他通過將查詢結果列設定到我們指定的對象的屬性中,其本質上我們的對象和資料庫並無直接關係,我們使用的仍然是sql。
MyBatis學習總結_18_MyBatis與Hibernate區別