初識hibernate 2

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

 QuerySyntaxException:HQL語句錯誤 

JavaBean規範(通過那個屬性對數據庫進行操作就對那個屬性進行封裝 ) 單獨創建一個人QueryBean文件 query 查詢
1.屬性都是private,並且添加無參有參構造方法 
2.添加無參構造
3.實現Serializable 接口

投影查詢:查詢部分列 
1.List<Object[]>

2,List<類名>:HQL : 類名 (要查詢的列名)

該類中必須有對應的構造     重點使用頻繁    可以查所有

1.List<Map>

1. 增刪改操作:
1.先查出持久化對象  get load

2.session.delete()/update()

提交事務


2 通過HQL進行修改操作

1.編寫 HQL

2.獲取Query

3.query.executeUpdate():受影響的記錄數



HQL條件查詢方式:

1. ?  :setXXX(下標,值) 注意下標從0開始 

 setParameter(下標,值)

2.參數名  

setParameter("參數名","參數值");

setProperties(Map/JavaBean)

注意屬性名要和HQL中參數名一致 


 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章