Hibernate [冬眠]
作用:JDBC在訪問數據庫的時候會產生很多的冗餘代碼,影響程序員的開發效率。爲了簡 化訪問數據庫的操作
對於程序而言最重要的是? 數據
數據有怎麼樣的表現形式?
1.內存[臨時數據 transient]
Java 中的Object 是一種臨時數據
2.數據庫
表【table】的形式 持久化數據
在java開發|web開發 就是 由 Object<---->table
有Object 到 table 或者由 table 到 Object
ORMapping Object Relationship(關係,泛指數據庫) Mapping
1. java類 表
User t_user 一個類對應一張表
Object row 表當中的每一行數據代表一個對象
Property column 表當中的每一個列對應對象中的屬性
id 主鍵 判斷對象和數據庫中的關係是唯一的,id不是對象的固有屬性
僅僅只是一個對應關係
配置文件:映射文件【方便維護】
ORMapping框架
Hibernate 通用的CRUD(增刪改查)方法
toplink
Hibernate : www.hibernate.org
1.hibernate目錄結構
eg 一個hibernate的拍賣行的案例
etc hibernate的配置文件
grammar HQL的語法
Hibernater的開發
1.搭建hibernate的環境建立一個java工程
1.導入jar包
hibernate3.jar
lib *
ojdbc4.jar [數據庫驅動jar包]
2.導入配置文件
1.導入與運行環境相關的配置文件
hibernate.cfg.xml--->etc目錄中
位置在src目錄下
1.配置與數據庫連接相關的配置參數
2.與自身屬性相關的配置
3.對於映射文件的註冊
3.提供映射關係的配置文件
1.配置文件的名稱 xxx.hbm.xml
2.配置文件的位置 任意
導入DTD 約束
在hibernate3.jar-->org.hibernate-->hibernate-mapping-3.0.dtd
Hibernate 核心API
1.Configuration 配置 作用讀取配置文件 獲得SessionFactory
2.SessionFactory -->創建Session,重量級資源
3.Session-->負責java程序與數據庫的交互,提供一套CRUD的方法[輕量級]
Session如何與數據庫進行連接:Session內部封轉了Connection對象
|-Transaction 專門處理事務 所有的hibernate的程序必須控制事務
|-Query 複雜的查詢(非主鍵的查詢)
Hibernate的開發 ORMapping的開發 O R M
1 O Object 提供對象
注意:對象的主鍵類使用封轉類 id integer
2 R 數據庫 建表
3 M 映射文件的配置
4 在hibernage.cfg.xml中爲映射文件進行註冊
5 採用Hibernate的核心API進行編程處理
org.hibernate.MappingException: Unknown entity: zx.hb.day1.pojo.User
說明映射文件沒有註冊
Session.save(Obect);//插入數據
increment主鍵生成器的原理
select max(t_id) from g_user
從操作的表當中查詢出最大的主鍵值,然後將該值+1作爲新的主鍵值
Session.get(class,pk);//通過session查詢數據依賴於主鍵
刪除
先查詢在刪除:
1.確保該對象的存在
2.獲得該對象的主鍵值
Object ojb=session.get(Object.class,pk);
Session.delete(Object);
修改
先查詢再修改
1.確保對象的存在
2.獲得該對象的主鍵值
Object obj=(Object)session.get(Object.class,pk);
obj.setXXX(xxxx);//在內存中對數據進行修改
session.update(obj);
創建工具類,封裝Session
1.SessionFactory 工廠類
1).創建Session
2).進行二級緩存
SessionFactory是重量級資源特點:功能非常強大,佔用的內存就多
由於重量級資源佔用內存,不能頻繁的創建,只創建一個,就會引發線程安全問題,
重量級資源一般來講是線程安全.運行多線程訪問。
2.Session 代表了用戶的操作
1.提供了一套CRUD的方法 save(Object); update(Object); delete(Object);
get(calss,pk);
2.內部封了Connection
Session:輕量級資源(每一個用戶獨享,消耗內存很少)
模擬一個註冊
ReigstAction-->UserBiz -->UserDao
register(User u ) save(User u);
應該在同一個Session當中,在同一個線程中完成註冊
對於事務的控制在Biz層進行處理
應爲biz可能會處理多個Dao層的數據,事務的原子特性【要麼成功要麼失敗】,事務的處理必須在Biz層處理
事務的特性:原子性,持久性,一致性,隔離性
Object ----> Thread對象
ThreadLocal 工具類:將一個對象存入到線程的Map當中
key: 當前ThreadLocal對象
value:存入的值/對象
Hibernateday01學習筆記
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.