1.hibernate 對象狀態
瞬時態 : new 的對象 和session關聯之前 瞬時態 和數據庫沒什麼關係
持久態 : 跟Session 關聯的對象,受Session管理的對象
持久化對象:該對象和數據通着氣的對象,通過操作持久化對象可以操作數據庫 操作瞬時/遊離態 不能同步更新數據庫
通過HQL查出的對象也是持久化對象
變持久的方法: save update delete get load
注意:持久化的對象其屬性值改變後,在事務提交的時候會自動更新數據庫
髒檢查 :在事務提交事務時候,hibernate會對持久化對象的屬性值進行檢查,一旦其屬性值發生改變,會自動發送sql到數據庫,對數據庫進行更新
遊離態脫離的方法: session.evict(數據庫表明) session.close(); session.clear(); 注意:遊離態並不表示對象已被垃圾回收站回收
遊離態:和session脫離關聯的對象 ,但是該對象還存在OID(Object id:改對象對應數據庫記錄的主鍵)
遊離態和瞬時態的區別:遊離態的對象有OID,瞬時態是還未被處理的對象 一般面試會提到
遊離態----->持久態: session.saveOrUpdate(數據庫表明) 重新恢復爲持久態
持久態---->遊離態: session.evict(數據庫表明)
session.close();
session.clear()
瞬時態--->持久態: save update delete get load
hibernate 單表查詢:
主鍵查詢:
get :如果該主鍵不存在,返回null,不會拋出異常(其實可能下一行會拋出異常,比較坑)
load:如果該主鍵不存在,拋出異常 ObjectNotFoundException
查詢一個表中的所有數據
HQL:Hibernate Query Language 查詢語句
HQL是基於對象的,不能寫表名,把sql中的表名替換成類名
select * from panda - 替換爲--- from Panda
select fur_color from panda ----- 替換爲-select furColor from Panda 把列名替換成屬性名
Query
2,List<類名>:HQL : 類名 (要查詢的列名)
該類中必須有對應的構造 重點使用頻繁 可以查所有
1.List<Map>
1. 增刪改操作:
1.先查出持久化對象 get load
2.session.delete()/update()
3 提交事務
2 通過HQL進行修改操作
1.編寫 HQL
2.獲取Query
3.query.executeUpdate():受影響的記錄數
HQL條件查詢方式:
1. ? :setXXX(下標,值) 注意下標從0開始
setParameter(下標,值)
2.參數名
setParameter("參數名","參數值");
setProperties(Map/JavaBean)
注意屬性名要和HQL中參數名一致