hibernate次日

  hibernate的核心思想就是將以前對單個字段的操做變爲操做一個對象,使用了ORM(Object relation mapping)對象關係映射的思想mysql

   

·  在hibernate中對數據庫特殊字段的有着具體配置,不一樣的數據庫有不一樣的主鍵生成策略  sql

      映射到數據的實體對象也須要有如下幾點須要注意數據庫

  1. 私有化成員變量
  2. 提供get/set方法
  3. 提供無參構造(底層須要反射 反射支持是無參構造)
  4. 類型儘可能使用包裝類 private int  Integer  由於包裝類有null值 
  5. 須要有oid( object id )跟主鍵相對應
  6. 持久化類儘可能不使用final修飾

      主鍵的shengt生成策略、          緩存

        主鍵的生成有倆個位置能夠生成 : JAVA  數據庫session

        天然主鍵跟業務有關 參與了業務邏輯主要用來區分不一樣數據 對象 保證數據不重複 oracle

        訂單表(order_id) 支付 oid發送了給第三方  第三方響應回來order_id數據app

        代理主鍵跟業務無關 主要用來區分不一樣數據 對象 保證數據不重複ide

      JAVAsqlserver

        手動插入ui

        assigned : 手動插入主鍵

        自動插入

        increment: hibernate 自動查詢數據庫增加 不適合集羣(多個計算機組合成的效果)

        每次查詢這個表的最大值 +1 賦值

      uuid : 自動產生一個隨機的id

    數據庫

      native : 根據不一樣數據的底層自動增加

      identity: mysql的自動增加(auto_increment)  支持自動增加字段 db2 sqlserver

      sequence:oracle 自增加序列

    固然在操做持久化對象的時候,持久化對象也存在三種不一樣的狀態

        對象 在建立到得到 到 session 其實經歷了三種狀態

       * 瞬時態: 建立一個對象 瞬時態 沒有OID 跟session沒有關係

       * 持久態: 得到一個對象 (重點) 有OID 跟session有關係

       * 遊離態或者脫管態:session關閉後 叫遊離態 有OID 跟session不要緊

 

   hibernate的一級緩存和快照機制的原理示意圖

      

      

  hibernate對數據庫的操做都須要開啓事務

    事務指的是  邏輯的一組操做,要麼所有成功,要麼所有失敗

  

事務的特性:

原子性一組操做 不可再分割

C 一致性: 事務的先後數據保證一致

I 隔離性(lsolation): 多事務之間的操做

D 持久性: 事務不可逆

 

 

隔離問題:

髒讀 : 一個事務讀到了另外一個事務沒有提交的數據

不可重複讀一個事務讀到了另外一個事務已提交的數據(update)

虛讀/幻讀: 一個事務讀到了另外一個事務已提交的數據(insert)

 

解決方案:

讀未提交 不解決任何問題

讀已提交 解決髒讀 Oracle默認隔離級別

可重複讀 解決髒讀 不可重複讀問題  mysql的默認隔離級別

 

串行化 解決三個問題

 

    對事務的配置

   在hibernate的核心配置文件中,

  

    openSession() 表示 每一次調用 得到一個新的session對象

    getCurrentSession() 表示得到當前線程的session對象 等效之前的將connection 綁定的到當前線程上

 

 

  hibernate也存在其餘的檢索方式,可是使用起來要因環境而異

    

  1. oid查詢 get/load
  2. 對象導航查詢
  3. HQL ( Hibernate Query Language) hibernate查詢語言 面向對象
  4. QBC ( Query By Creteria) hql更加面向對象  離線查詢
  5. SQL
相關文章
相關標籤/搜索