hibernate核心接口:
Session 、 Transaction 、 Query 、Configuration Configuration :配置、根啓動Hibernate 創建SessionFactory對象 SessionFactory :初始化Hibernate創建Session對象 Sesssion :負責保存、更新、刪除、加載和查詢對象 Transaction :管理事務 Query和Criteria : 執行數據庫查詢 Query query = session.createQuery("from Customer c where c.name =:name"); query.setParameter("name","tom",Hibernate.STRING); Sessin 接口方法 : save(); updata(); delete(); load(); find(); Session 通過 SessionFactory.opensession()方法獲得; 控制事務一起Transaction Session session = SessionFactory.openSession(); Transaction tx = null ; try{ tx = session.begionTransaction(); //邏輯方法 tx.commit(); } catch(Exception e){ e.printStackTace(); if(tx != null)tx.rollback(); thows e ; } finlly{ session.close(); } //session.save(customers)執行下列SQL語句: insert into CUSTMERS (ID , NAME , EMAIL , PASSWORD , PHONE , ADDRESS , SEX , IS_MARRIED , DESCRIPTION , IMAGE , BIRTHDAY , REGISTERED_TIME ) VALUES (1 , 'TOM' , '1234', 55556666 ,'SHANGHAI','M' , 0 , 'I AM VERY HONEST' @ ,'1980-05-06' , NULL); //session.find("from customer as c order by c.name asc")執行下列SQL語句: select * from CUSTOMERS order by name asc ; //(customer)session.load(customer.class,customer_id)執行下列SQL語句: select * from CUSTOMERS WHERE ID = 1 ; update CUSTOMERS SET NAME = 'TOM' ,EMAIL ='[email protected]' ,ADDRESS = 'BEIJING' WHERE ID = 1; //session.delete("from CUSTOMER AS C");執行下列SQL語句: select * from CUSTOMERS ; DELETE FROM CUSTOMERS WHERE ID = 1; 或是:session.load(customers.class,id); session.delete(customer); 或是: session.load(customers.class,new int(1)); /////////////////映射對象標識符 Hib中的標識符來建立內存中的對象和數據庫表中記錄的對應關係,對象的OID和數據庫表的主鍵對應。爲了保證OID的唯一性和不可變性,應該讓Hib給OID賦值。 /////////////////映射一對多關聯關係 在關係數據庫中,只存在外鍵參照關係,而且總是由many方參照one方。爲了消除數據冗餘,關係性數據庫只能支持多對一或是一對一的單向關聯。 /////////////////操作持久化對象 session的實體對象狀態分爲三種:遊離對象,持久化對象,臨時對象 臨時對象 :不處於session的緩存中,不和任何的session實例關聯,數據庫中無記錄。 例:order o = new order();通過new剛剛創建的java對象處於臨時狀態 session的delete方法使遊離態,持久化的對象轉變爲臨時狀態 持久化對象:位於session的緩存中,總是被一個session實例關聯,和數據庫中記錄對應 session的save方法使臨時態變爲持久化 session的load,get方法返回對象總是處於持久化狀態 session的find方法返回list存放的都是持久化對象 session的update,saveOrUpdate,lock方法使遊離態轉換爲持久態對象 一個持久化對象和臨時對象有級聯保存的時候session在清空緩存的時候會 把臨時對象轉化爲持久對象 遊離態對象:不位於session的緩存中,不被session關聯,數據庫中可能有記錄 session的close方法使緩存清空,緩存中的所有持久化對象變爲遊離態 session的evict方法從緩存中刪除一些持久化對象,不推薦使用應該通過 查詢語句來控制對象的深度。 ////////////////session的保存,更新,刪除和查詢 保存:session.save(); customer c = new coustomer(); c.setid(new log(9)) ; c.setname ("tom"); session s = sessionF.opensession(); transaction tx = s.beginTransaction(); s.save(c); tx.commit(); session.close(); 如果想改變OID的值應使用save的重載save(customer,new long(9));不推薦使用 save方法是當session清理緩存時纔會執行insert語句,如果在save以後又對對象進行 修改session會再執行一次update操作。 如果save方法已執行不能修改其OID屬性。 更新:session.update(); customer c = new customer(); c.setname("tom"); session s = sessionF.opensession(); Transaction tx = s.beginTransaction(); s.save(c); tx.commit(); session.close();//遊離態 c.setname("too"); session2.update(c); session2.close();//使session2和c關聯都會執行一次update修改操作。 session的saveOrUpdate方法同時包含了save和update方法,如果傳入的是臨時對象調 用save方法,如果傳入是遊離態就調用update方法如果傳入是持久化,就直接返回。 查詢:session的load,get和find方法 session的load和get方法根據給定的OID從數據庫中加載一個對象,load方法在沒有找 到對象時拋出notFoundException異常,get方法返回null。 get和load和其他查詢方法返回的對象位於session的緩存中,修改了對象的屬性後, session清理緩存時,會根據持久化對象的屬性來更新數據庫。 list CUSTOMER = SESSION.FIND("FROM CUSTOMER AS C WHERE C.ID = 1")返回關於 customer的一個集合。 刪除:session.delete方法,由於從數據庫中刪除對象對應的記錄,如果出入的是持久化對象session就計劃執行一個delete語句。如果出入的參數是遊離態對象,先使它成爲持久化對象,然後計劃執行一個delete語句。session只有在清理緩存的時候纔會執行delete語句。只有當調用session的close()方法時纔會從session的緩存中刪除對象。 session.delete("from customer as c where c.id > 8") ; /////////////session的檢索機制 load(),get(),find(); 用來對數據庫中檢索對象,load()和get()方法按照給定的OID加載一個持久化對象,find方法按照參數指定的HQL語句加載一個或多個持久化對象 CUSTOMER C = (CUSTOMER)SESSION.LOAD(CUSTOMER.CLASS,NEW LOAG(1)); CUSTOMER C = (CUSTOMER)SESSION.GET(CUSTOMER.CLASS,NEW LOAG(2)); LIST CUSTOMER = SESSION.FIND("FROM CUSTOMER AS C WHERE C.ID = 1"); |
Hibernate開發心得
Hibernate開發心得
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.