hibernate 學習筆記(1)

HIbernate提供了數據持久化層解決方案:

(即數據庫訪問框架)——我是這樣理解的

1、開發源代碼的對象關係映射框架

2、對JDBC進行了非常輕量級的對象封裝(其實我感覺並不算完全輕量級,封裝了部分底層方法,帶來了一定的簡化,也使其在這些方面變得不容易自定義?Mybatis感覺相對更加輕量化一點。。)

3、將JavaBean對象和數據庫的表建立對應的關係

將數據連接信息都存放在配置文件中


持久化:

將程序中數據的瞬時狀態與持戒狀態轉換的機制


瞬時狀態(Transient Objects) ——》臨時狀態

使用new操作符初始化的對象不是立刻就持久的。它們的狀態是瞬時的,也就是說它們沒有任何跟數據庫表相關聯的行爲,只要應用不再引用這些對象(不再被任何其它對象所引用),它們的狀態將會丟失,並由垃圾回收機制回收。

持久化對象(Persist Objects) ——》持久化狀態

持久實例是任何具有數據庫標識的實例。它有持久化管理器Session統一管理,持久實例是在事務中進行操作的——它們的狀態在事務結束時同數據庫進行同步。當事務提交時,通過執行SQL的INSERT、UPDATE和DELETE語句把內存中的狀態同步到數據庫中。

離線對象(Detached Objects) ——》遊離狀態

Session關閉之後,持久化對象就變爲離線對象。離線表示這個對象不能再與數據庫保持同步,它們不再受Hibernate管理。(持久化對象脫離了Session的對象。如Session緩存被清空的對象。特點:已經持久化,但不在Session緩存中。處於此狀態的對象叫遊離對象。)


1、將對象保存到關係型數據庫中。

2、從關係數據庫讀取數據存入對象。

ORM(Object Relational Mapping)對象關係映射

1、編寫時以面向對象方式處理數據

2、保存時以關係型數據庫方式存儲


ORM解決方案:

1、在持久化對象上執行基本增刪改查操作的API

2、用於對持久化對象或屬性查詢的一種語言或者API

3、用於實體關係映射的工具

4、能夠與事務對象交互,執行檢查,延遲加載以及其他優化功能


HIbernate提供了C3P0的連接池功能!!!


可以通過導入單元測試包,然後通過@Test標註方法進行測試。


Hibernate操作數據庫:

1、讀取並解析配置文件“hibernate.cfg.xml”

Configuration cfg = new Configuration().configure();

2、讀取並解析映射信息,創建SessionFactory

SessionFactory factory = cfg.buildSessionFactory();

3、打開Session

Session session= factory.openSession();

4、開始一個事務(增刪改操作必須通過事務提交,而查詢操作可選)

Transaction tx = session.beginTransaction();

5、數據庫操作

session.save(new Mydept(....));

6、提交事務

tx.commit();

7、事務關閉以及會話關閉

tx.close();

session.close();


於hibernate.cfg.xml中設置: (當設置hb2ddl.auto時表不存在會進行自動生成)

<!-- 手動配置顯示SQL語句 -->

<property name="show_hql">true</property>

<property name="format_sql">true</property>

<property name="hb2ddl.auto">update</property>


可以通過在hibernate.cfg.xml文件中配置

<property name="current-session-context-class">thread</property>

可自動關閉session,無需手動關閉?


增刪改的方法分別爲:

save()

update()

delete()

查詢:

get()   當查找數據不存在時顯示null 立即加載

load() 當查找數據不存在時拋出異常(ObjectNotFoundException) 延遲加載


發佈了26 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章