Hibernate(二)之Hibernate-api詳解


一、Hibernate體系結構

  

二、Hibernate-api詳解

  2.1、Configuration配置對象

    Configuration是用來加載配置文件的

   我們Hibernate中主要有兩個配置文件,第一個是核心的配置文件,第二個是映射文件。

    

  2.2、SessionFactory工廠

    SessionFactory 相當於java web連接池,用於管理所有session
    獲得方式:config.buildSessionFactory();
    sessionFactory hibernate緩存配置信息 (數據庫配置信息、映射文件,預定義HQL語句 等)
    SessionFactory線程安全,可以是成員變量,多個線程同時訪問時,不會出現線程並發訪問問題。

    

    SessionFactory與連接池的區別

      

    getCurrentSession()方法

    

 

  2.3、session對象

    用來操作數據庫的。Sesion相當於JDBC中的Connection。我們通過session操作PO對象實現增刪改查。

    2.3.1、增

      

    2.3.2、改  

      

    2.3.3、刪

      

    2.3.4、查

      A.使用session中的get方法查詢

      

    結果:

    B.使用session中的load方法

      load方法.返回一個代理對象,獲得其內容時,會查詢數據庫,是每次訪問屬性都會查詢數據庫嗎?

        答:不是每次都查.代理對象中有一個標識是否被初始化的boolean型變量. 記錄是否被初始化過. 

      代理都是要基於接口的,用load方法返回的代理,就沒有實現任何接口? 

        答:java中的動態代理是基於接口. 而 Hibernate 是使用javassist-3.12.0.GA.jar 產生代理對象的.

           該代理與被代理對象之間的關系是繼承關系.與我們學的動態代理不是一種.所以不需要接口.

    

    出現bug:

    分析:get和load的執行原理

      

    C.使用HQL語言查詢數據庫中表的所有記錄

    

    D.使用Criteria查詢所有數據庫

    

    E.使用原生的SQL語句查詢

    

    2.3.5、總結

    在增刪改查中我們學習的方法有    

     session.save();
     session.update();
     session.delete();
     session.get();
     session.load(); 對比get
     session.createQuery();
     session.createCritieria();
     session.createSqlQuery();

  2.4、Transaction對象

      Transaction封裝了事務的操作

       一般事務的操作中有:

          開啟事務  beginTransaction()

          獲得事務  getTransaction()

          提交事務  commit()

          回滾事務  rollback()

      

    細節處理

      

          從這里中我們使用getCurrentSession()方法獲得一個事務,當你沒有關閉這個事務的時候,

          當你再次獲取事務,它們屬於同一個事務。

  2.5、Query對象

    Query對象封裝了HQL語句對象,且封裝了查詢的細節

    

  2.6、Criteria對象(了解)

    

    使用like查找

      

    一些基本的查詢條件查詢

    

  2.7、工具類

    我們知道在使用hibernate進行增刪改查的時候都要獲取到session,這導致代碼的重用性很強,所以我們可以

    創建一個工具類去解決這個問題。   

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;

//完成Hibernate工具類
//封裝配置文件讀取操作
//封裝Sessionfactroy創建操作
//封裝session獲得操作
public class HibernateUtils {

    private static SessionFactory sf;
    
    static{
        //1加載配置
        Configuration  conf = new Configuration().configure();
        //2 根據Configuration 配置信息創建 SessionFactory
        sf = conf.buildSessionFactory();
        //
        Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
            
            @Override
            public void run() {
                System.out.println("虛擬機關閉!釋放資源");
                sf.close();
            }
        }));
        
    }
    
    public static org.hibernate.Session  openSession(){
                
                //3 獲得session
                Session session = sf.openSession();
                
                return session;
    }
    
    public static org.hibernate.Session  getCurrentSession(){
        //3 獲得session
        Session session = sf.getCurrentSession();
        
        return session;
    }
    
}

 

    

    

 

  

     

        

 

  

 

   

 

        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM