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) 延遲加載