學習日記(一)SessionFactory的創建和Session的獲得

學習Hibernate,首先我們要對其配置文件的作用有了解。

1.Hibernate的基本配置文件有兩種:hibernate.cfg.xml和.hbm.xml文件。前者包含了Hibernate與數據庫的基本連接信息,在Hibernate工作的初始階段,這些信息被先後加載到Configuration和SessionFactory實例;後者包含了Hibernate的基本映射信息,即系統中每一個類與其對應的數據庫表之間的關聯信息,在Hibernate工作的初始階段,這些信息通過hibernate.cfg.xml的mapping節點被加載到Configuration和SessionFactory實例。
hibernate.cfg.xml中的resource
<!--指定Hibernate映射文件路徑 --> 
     <mapping resource="com/Hibernate/xxxx.hbm.xml" /> 
XXX.hbm.xml中的class
 <!-- 下面的class節點定義了Province類和對應數據庫表之間的關聯關係 --> 
     <class 
        name="com.xxx.hibernate.Province" 
        table="Province" 
     >


2.Hibernate的重要操作

當我們調用Configuration config=new Configuration().configure();

       時候Hibernate會自動在當前的CLASSPATH中搜尋hibernate.cfg.xml文件並將其讀取到內存作爲後繼操作的基礎配置。

 

 我們也可以指定配置文件名,如果不希望使用默認的hibernate.cfg.xml文件作爲配置文件的話。

   

SessionFactory

     SessionFactory 負責創建Session的實例。我們可以通過Configuation實例創建SessionFactory;


 SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();


       /* Configuration config=new Configuration().configure();

        SessionFactory sessionFactory=config.buildSessionFactory(); */

 

Configuration 實例config 會根據當前的配置信息,構造SessionFactory實例並返回。SessionFactory一旦構建完畢,即被賦予特定的配置信息。也就是說,之後config的任何變更將不會影響到已經創建的SessionFactory實例(SessionFactory)。如果需要使用基於改動後的config實例的SessionFactory,需要從config重新構建一個SessionFactory實例。

 

Session

   Session 是持久層操作的基礎,相當於JDBC中的Connnection。

           Configuration config=new Configuration().configure();  //讀取默認的hibernate.cfg.xml的文件

           SessionFactory sessionFactory=config.buildSessionFactory();  //通過config創建sessionFactory的實例

           Session session=sessionFactory.openSession();       //獲得session

之後,我們就可以調用Session所提供的save,find,flush等方法完成持久化操作:

         看例Save:

   TUser user=new TUser();

   user.setName("yuanliang");

   session.save(user);

   session.flush();//Session.flush方法強制數據庫同步,這裏既強制Hibernate將user實例立即同步到數據庫中。在事物提交的時候和Session關閉的時候,也會自動執行flush方法

   

find()//這個方法返回一個List

   List list=Session.find("from Books");

Load() //這個方法返回是一個對象

   Customer c=(Customer)session.load(Customer.class,customer_id);

 

3.修改數據:

1). 將要修改的數據從數據庫讀出,賦值給表對應的持久化類

 Query query = session.createQuery("from User as u where list = query.list()");
 
User usr = (User)list.get(0);

2). 對得到的持久化對象進行修改
 
usr.setUsername("Look");
3). 啓動事務管理
 
  Transaction ts = session.beginTransaction();

4). 將賦值後的持久化對象提交給session
 
 
 
session.save(usr);
5). 結束事務管理並向數據庫提交
 
ts.commit();

-------------------------------
public void update(){
 
 
 
 Integer Integer(2);
 
 Transaction ts = null;
 
 try {
 
  Session session = HibernateSessionFactory.currentSession();
 
  
 
  Query query = session.createQuery("from User as u where list = query.list()");
 
  User usr = (User)list.get(0);
 
  usr.setUsername("Look");
 
  
 
  ts = session.beginTransaction();
 
  session.save(usr);
 
  
 
  ts.commit();
 
  
 
 } catch (HibernateException e) {
 
  // TODO Auto-generated catch block
 
  e.printStackTrace();
 
  try {
 
   ts.rollback();
 
  } catch (HibernateException e1) {
 
   // TODO Auto-generated catch block
 
   e1.printStackTrace();
 
  }
 
 }
 
}


另:此update例子可能不能運行,有關Hibernate的增刪改查問題,請查閱

學習日記(二)Hibernate用法:查詢,更新,刪除


發佈了16 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章