MyBatis學習總結_18_MyBatis與Hibernate區別

來源:互聯網
上載者:User

標籤:

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

2.其次,MyBatis則時仍然是基於sql查詢的方式,他通過將查詢結果列設定到我們指定的對象的屬性中,其本質上我們的對象和資料庫並無直接關係,我們使用的仍然是sql。

MyBatis學習總結_18_MyBatis與Hibernate區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.