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:
- 讀取並解析配置檔案以及對映檔案(使用Configuration建立物件並點出呼叫configure()方法
- 依據配置檔案和對映檔案中的的資訊建立SlsessionFactory物件一旦 sqlsessionFactory建立完畢,Configuration()物件的任何變更都不會影響建立好的SqlsessionFactory,如果配置檔案發生了改變,那麼就需要基於改動後的Configuration物件建立一個新的SessionFactory,通過Configuration.buildSessionFactory()賦值給SessionFactory
- 開啟Session (通過建立的SqlssessionFactory點出getCurrentSession()此方法可以避免多個執行緒拿到同一個會話造成執行緒併發的問題 而且這個方法呼叫之後不需要手動的關閉session 還可以使用 opeansession
- Session是Hibernate的持久化管理的核心,Session提供了眾多的方法save(),delete(),update(),get(),load(),通過這樣的方法可以透明的執行增刪改。
- 開始一個事務
- 使用Transaction 建立一個事務
- 資料庫操作:session.save();
- 結束事務
==========================================HQL中使用的方法=====================================
- 會使用hiobernate的HQL面向物件的查詢語言:其中我覺得裡面有一個引數繫結不錯
- 一種是使用佔位符? 通過下表進行繫結(query.setString(0, ”張雪為“)下標初始是0
- 第二種是使用命名的方式使用 :形式(query.setString(“name”,”張雪為“))
===========================================================
- bernate還有兩種快取的方式:
- 一級快取:他是和資料庫的一條sql繫結的執行完生命就結束了,在某個時間的點session會將快取中變化的資料更新到資料庫中保證資料一致,當事務提交之後,使用session.clear()可以清除hibernate的存
- 二級快取:sessionFactory預設應該是開啟得
==========================多表的查詢========================
- 多對一:通過配置<many-to-one> 裡面設定name=另一張表的欄位(物件) columm 配置他們相關聯的主外來鍵關係。這個是在class標籤中
- 配置多對多使用<many-to- many > 在set標籤中新增關聯表的名稱
-
- 二級快取,預設是開開的
Hibernate還有一個反向工程,可以自動生成實體類和對映關係的xm’l,我們還可以設定配置檔案,這個檔案應該是需要事先建立好
==========================================JPA================================================
@Entity 生明一個持久化類
@Table 持久化類對應的表
以上兩個是放在類的上面
@Id 相當於資料庫中的主鍵
@GeneratedValue 設定主鍵生成策略
@Cloumn 指的是資料庫的表字段
@UniqueConstraint 定義表的唯一約束
@Transient 可以忽略的屬性 不用持久化到資料庫中
==========================================拓展===================================================
1、getCurrentSession()會避免不同的執行緒拿到同一個會話,導致執行緒併發的問題
getCurrentSession()是通過 配置檔案中的name=current_session_context_class的property配置(當前會話管理的方式是和執行緒進行繫結)
2、如果他要是在重新呼叫會話的時候,getCurrentSession()會先檢查是否已經有了此會話,如果有就讓他用之間的會話,沒有再給他建立新的。
3、除此之外,當我們對資料庫一次事務操作之後,他會幫我們自動關閉會話。