1. 程式人生 > >Hibernate簡單得見解(會不斷更新如有間接這)

Hibernate簡單得見解(會不斷更新如有間接這)

Hibernate.cfg.xml  連線資料庫用的  設定資料庫方言(dialect)  設定資料庫驅動  可設定展示sql以日誌形式展示(show_sql) 並且格式化輸出sql(format_sql)  更直觀可讀性高   設定會話的管理方式(和執行緒進行繫結)指定當前session範圍和上下文由誰來跟蹤管理

Hibernate中的實體類我覺得很有必要實現Serializable介面 保證資料在傳輸時能夠對其例項正確執行序列化操作

建立完實體還要建立和資料庫之間的對映,使用class標籤 標籤裡面有 name 它指的是建立類的全限定名,table指的是與之對應的資料庫中表,calss裡面還有id標籤和 property標籤  id標籤和property標籤內容差不多一樣,像name指的就是實體中的欄位名稱,column指的是資料庫中的表字段,只不過id是資料庫中的主鍵,id裡面還有一個配置主鍵生成策略的叫做generator mysql使用identity 生成自動增長主鍵  Oracle使用sequence

Hibernate內部也是使用jdbc來訪問資料庫的

拓展:

jdbc訪問資料庫步驟:載入驅動 提供jdbc url 進行資料庫連線 建立一個Statement 執行sql語句   返回資料  關閉資料庫連線

=======================hibernate執行流程後臺====================

Hibernate:

  1. 讀取並解析配置檔案以及對映檔案(使用Configuration建立物件並點出呼叫configure()方法
  2. 依據配置檔案和對映檔案中的的資訊建立SlsessionFactory物件一旦 sqlsessionFactory建立完畢,Configuration()物件的任何變更都不會影響建立好的SqlsessionFactory,如果配置檔案發生了改變,那麼就需要基於改動後的Configuration物件建立一個新的SessionFactory,通過Configuration.buildSessionFactory()賦值給SessionFactory
  3. 開啟Session (通過建立的SqlssessionFactory點出getCurrentSession()此方法可以避免多個執行緒拿到同一個會話造成執行緒併發的問題 而且這個方法呼叫之後不需要手動的關閉session      還可以使用 opeansession
    1. Session是Hibernate的持久化管理的核心,Session提供了眾多的方法save(),delete(),update(),get(),load(),通過這樣的方法可以透明的執行增刪改。
  4. 開始一個事務
    1. 使用Transaction 建立一個事務
  5. 資料庫操作:session.save();
  6. 結束事務

==========================================HQL中使用的方法=====================================

  1. 會使用hiobernate的HQL面向物件的查詢語言:其中我覺得裡面有一個引數繫結不錯
    1. 一種是使用佔位符? 通過下表進行繫結(query.setString(0, ”張雪為“)下標初始是0
    2. 第二種是使用命名的方式使用 :形式(query.setString(“name”,”張雪為“))

===========================================================

  1. bernate還有兩種快取的方式:
    1. 一級快取:他是和資料庫的一條sql繫結的執行完生命就結束了,在某個時間的點session會將快取中變化的資料更新到資料庫中保證資料一致,當事務提交之後,使用session.clear()可以清除hibernate的存
    2. 二級快取:sessionFactory預設應該是開啟得

==========================多表的查詢========================

  1. 多對一:通過配置<many-to-one> 裡面設定name=另一張表的欄位(物件) columm 配置他們相關聯的主外來鍵關係。這個是在class標籤中
  2. 配置多對多使用<many-to- many >  在set標籤中新增關聯表的名稱
    1. 二級快取,預設是開開的

Hibernate還有一個反向工程,可以自動生成實體類和對映關係的xm’l,我們還可以設定配置檔案,這個檔案應該是需要事先建立好

==========================================JPA================================================

@Entity 生明一個持久化類

@Table 持久化類對應的表

以上兩個是放在類的上面

@Id 相當於資料庫中的主鍵

@GeneratedValue 設定主鍵生成策略

@Cloumn 指的是資料庫的表字段

@UniqueConstraint 定義表的唯一約束

@Transient 可以忽略的屬性 不用持久化到資料庫中

==========================================拓展===================================================

1、getCurrentSession()會避免不同的執行緒拿到同一個會話,導致執行緒併發的問題

getCurrentSession()是通過 配置檔案中的name=current­­­_session_context_class的property配置(當前會話管理的方式是和執行緒進行繫結

2、如果他要是在重新呼叫會話的時候,getCurrentSession()會先檢查是否已經有了此會話,如果有就讓他用之間的會話,沒有再給他建立新的。

3、除此之外,當我們對資料庫一次事務操作之後,他會幫我們自動關閉會話。