熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

編程技術分享:Hibernate開發心得

2013-11-23 20:33:59  來源: Java開源技術 

  hibernate核心接口

  Session Transaction Query Configuration

  Configuration 配置根啟動Hibernate 創建SessionFactory對象

  SessionFactory 初始化Hibernate創建Session對象

  Sesssion 負責保存更新刪除加載和查詢對象

  Transaction 管理事務

  Query和Criteria 執行數據庫查詢

  Query query = sessioncreateQuery(from Customer c where cname =:name);
    querysetParameter(nametomHibernateSTRING);

  Sessin 接口方法

  save()
    updata()
    delete()
    load()
    find()

  Session 通過 SessionFactoryopensession()方法獲得
    控制事務一起Transaction
    Session session = SessionFactoryopenSession();
    Transaction tx = null ;
    try{
        tx = sessionbegionTransaction();
        //邏輯方法
        mit();
    }
    catch(Exception e){
          eprintStackTace();
          if(tx != null)txrollback();
          thows e ;
    }
    finlly{
          sessionclose();
    }

  //sessionsave(customers)執行下列SQL語句

  insert into CUSTMERS (ID NAME EMAIL PASSWORD PHONE ADDRESS SEX IS_MARRIED DESCRIPTION
      IMAGE BIRTHDAY REGISTERED_TIME ) VALUES ( TOM SHANGHAIM
      I AM VERY HONEST @ NULL);

  //sessionfind(from customer as c order by cname asc)執行下列SQL語句
    select * from CUSTOMERS order by name asc ;

  //(customer)sessionload(customerclasscustomer_id)執行下列SQL語句
    select * from CUSTOMERS WHERE ID = ;
    update CUSTOMERS SET NAME = TOM EMAIL =TOM@YAHOOCOM ADDRESS = BEIJING WHERE ID = ;

  //sessiondelete(from CUSTOMER AS C);執行下列SQL語句
    select * from CUSTOMERS ;
    DELETE FROM CUSTOMERS WHERE ID = ;
    或是sessionload(customersclassid);
          sessiondelete(customer);
    或是
          sessionload(customersclassnew int());

  /////////////////映射對象標識符

  Hib中的標識符來建立內存中的對象和數據庫表中記錄的對應關系對象的OID和數據庫表的主鍵對應為了保證OID的唯一性和不可變性應該讓Hib給OID賦值

  /////////////////映射一對多關聯關系

  在關系數據庫中只存在外鍵參照關系而且總是由many方參照one方為了消除數據冗余關系性數據庫只能支持多對一或是一對一的單向關聯

  /////////////////操作持久化對象

  session的實體對象狀態分為三種游離對象持久化對象臨時對象

  臨時對象 不處於session的緩存中不和任何的session實例關聯數據庫中無記錄

  例order o = new order()通過new剛剛創建的java對象處於臨時狀態

  session的delete方法使游離態持久化的對象轉變為臨時狀態

  持久化對象位於session的緩存中總是被一個session實例關聯和數據庫中記錄對應

  session的save方法使臨時態變為持久化

  session的loadget方法返回對象總是處於持久化狀態

  session的find方法返回list存放的都是持久化對象

  session的updatesaveOrUpdatelock方法使游離態轉換為持久態對象

  一個持久化對象和臨時對象有級聯保存的時候session在清空緩存的時候會

  把臨時對象轉化為持久對象

  游離態對象不位於session的緩存中不被session關聯數據庫中可能有記錄

  session的close方法使緩存清空緩存中的所有持久化對象變為游離態

  session的evict方法從緩存中刪除一些持久化對象不推薦使用應該通過

  查詢語句來控制對象的深度
          

  ////////////////session的保存更新刪除和查詢

  保存sessionsave();
      customer c = new coustomer();
      csetid(new log()) ;
      csetname (tom);
      session s = sessionFopensession();
      transaction tx = sbeginTransaction();
      ssave(c);
      mit();
      sessionclose();
 
      如果想改變OID的值應使用save的重載save(customernew long());不推薦使用
 
      save方法是當session清理緩存時才會執行insert語句如果在save以後又對對象進行   修改session會再執行一次update操作

  如果save方法已執行不能修改其OID屬性

  更新sessionupdate();
      customer c = new customer();
      csetname(tom);
      session s = sessionFopensession();
      Transaction tx = sbeginTransaction();
      ssave(c);
      mit();
      sessionclose();//游離態
      csetname(too);
      sessionupdate(c);
      sessionclose();//使session和c關聯都會執行一次update修改操作
 
     session的saveOrUpdate方法同時包含了save和update方法如果傳入的是臨時對象調  用save方法如果傳入是游離態就調用update方法如果傳入是持久化就直接返回

  查詢session的loadget和find方法

  session的load和get方法根據給定的OID從數據庫中加載一個對象load方法在沒有找  到對象時拋出notFoundException異常get方法返回null

  get和load和其他查詢方法返回的對象位於session的緩存中修改了對象的屬性後  session清理緩存時會根據持久化對象的屬性來更新數據庫

  list CUSTOMER = SESSIONFIND(FROM CUSTOMER AS C WHERE CID = )返回關於 customer的一個集合

  刪除sessiondelete方法由於從數據庫中刪除對象對應的記錄如果出入的是持久化對象session就計劃執行一個delete語句如果出入的參數是游離態對象先使它成為持久化對象然後計劃執行一個delete語句session只有在清理緩存的時候才會執行delete語句只有當調用session的close()方法時才會從session的緩存中刪除對象

  sessiondelete(from customer as c where cid > ) ;

  /////////////session的檢索機制 load()get()find();

  用來對數據庫中檢索對象load()和get()方法按照給定的OID加載一個持久化對象find方法按照參數指定的HQL語句加載一個或多個持久化對象

  CUSTOMER C = (CUSTOMER)SESSIONLOAD(CUSTOMERCLASSNEW LOAG());
    CUSTOMER C = (CUSTOMER)SESSIONGET(CUSTOMERCLASSNEW LOAG());
    LIST CUSTOMER = SESSIONFIND(FROM CUSTOMER AS C WHERE CID = );


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28682.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.