Hibernateday01學習筆記

Hibernate [冬眠]
   作用:JDBC在訪問數據庫的時候會產生很多的冗餘代碼,影響程序員的開發效率。爲了簡       化訪問數據庫的操作

對於程序而言最重要的是? 數據

數據有怎麼樣的表現形式?
  1.內存[臨時數據 transient]
    Java 中的Object 是一種臨時數據
  2.數據庫
    表【table】的形式 持久化數據



在java開發|web開發  就是 由 Object<---->table
    有Object 到 table 或者由 table 到 Object
 
ORMapping    Object Relationship(關係,泛指數據庫) Mapping
  1. java類        表
      User         t_user    一個類對應一張表
      Object       row       表當中的每一行數據代表一個對象
      Property     column    表當中的每一個列對應對象中的屬性
      id           主鍵      判斷對象和數據庫中的關係是唯一的,id不是對象的固有屬性
                             僅僅只是一個對應關係
   配置文件:映射文件【方便維護】 
  
ORMapping框架
  Hibernate   通用的CRUD(增刪改查)方法
  toplink  
 
 
Hibernate : www.hibernate.org
    1.hibernate目錄結構
       eg         一個hibernate的拍賣行的案例
       etc       hibernate的配置文件
       grammar   HQL的語法

Hibernater的開發
   1.搭建hibernate的環境建立一個java工程
      1.導入jar包
         hibernate3.jar
     lib *
         ojdbc4.jar [數據庫驅動jar包]
      2.導入配置文件
         1.導入與運行環境相關的配置文件
        hibernate.cfg.xml--->etc目錄中
            位置在src目錄下
         1.配置與數據庫連接相關的配置參數
         2.與自身屬性相關的配置
         3.對於映射文件的註冊
      3.提供映射關係的配置文件
           1.配置文件的名稱  xxx.hbm.xml
       2.配置文件的位置  任意
         導入DTD 約束
            在hibernate3.jar-->org.hibernate-->hibernate-mapping-3.0.dtd

Hibernate 核心API
  1.Configuration 配置 作用讀取配置文件 獲得SessionFactory
  2.SessionFactory -->創建Session,重量級資源
  3.Session-->負責java程序與數據庫的交互,提供一套CRUD的方法[輕量級]
     Session如何與數據庫進行連接:Session內部封轉了Connection對象
       |-Transaction 專門處理事務 所有的hibernate的程序必須控制事務
       |-Query 複雜的查詢(非主鍵的查詢)

Hibernate的開發 ORMapping的開發   O R M
  1 O Object 提供對象
    注意:對象的主鍵類使用封轉類 id integer
  2 R 數據庫 建表
  3 M 映射文件的配置
  4 在hibernage.cfg.xml中爲映射文件進行註冊    
  5 採用Hibernate的核心API進行編程處理

  org.hibernate.MappingException: Unknown entity: zx.hb.day1.pojo.User
     說明映射文件沒有註冊
 

 Session.save(Obect);//插入數據
  increment主鍵生成器的原理
     select  max(t_id) from g_user
     從操作的表當中查詢出最大的主鍵值,然後將該值+1作爲新的主鍵值

 Session.get(class,pk);//通過session查詢數據依賴於主鍵

 刪除
  先查詢在刪除:
    1.確保該對象的存在
    2.獲得該對象的主鍵值
 Object ojb=session.get(Object.class,pk);
 Session.delete(Object);

 修改
   先查詢再修改
     1.確保對象的存在
     2.獲得該對象的主鍵值
    Object obj=(Object)session.get(Object.class,pk);
    obj.setXXX(xxxx);//在內存中對數據進行修改
    session.update(obj);

創建工具類,封裝Session
  1.SessionFactory 工廠類
   1).創建Session
   2).進行二級緩存
     SessionFactory是重量級資源特點:功能非常強大,佔用的內存就多
        由於重量級資源佔用內存,不能頻繁的創建,只創建一個,就會引發線程安全問題,
    重量級資源一般來講是線程安全.運行多線程訪問。
  2.Session 代表了用戶的操作
      1.提供了一套CRUD的方法 save(Object); update(Object); delete(Object);   
                              get(calss,pk);
      2.內部封了Connection
       Session:輕量級資源(每一個用戶獨享,消耗內存很少)

模擬一個註冊
  ReigstAction-->UserBiz             -->UserDao
                 register(User u )          save(User u);
   應該在同一個Session當中,在同一個線程中完成註冊
  對於事務的控制在Biz層進行處理
     應爲biz可能會處理多個Dao層的數據,事務的原子特性【要麼成功要麼失敗】,事務的處理必須在Biz層處理
 
 事務的特性:原子性,持久性,一致性,隔離性
 
Object ----> Thread對象
  ThreadLocal 工具類:將一個對象存入到線程的Map當中
         key:  當前ThreadLocal對象
     value:存入的值/對象

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