Hibernate(二)之Hibernate-api詳解

1、Hibernate體系結構

  

2、Hibernate-api詳解

  2.一、Configuration配置對象

    Configuration是用來加載配置文件的java

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

    

  2.二、SessionFactory工廠

    SessionFactory 至關於java web鏈接池,用於管理全部session
    得到方式:config.buildSessionFactory();
    sessionFactory hibernate緩存配置信息 (數據庫配置信息、映射文件,預約義HQL語句 等)
    SessionFactory線程安全,能夠是成員變量,多個線程同時訪問時,不會出現線程併發訪問問題。數據庫

    

    SessionFactory與鏈接池的區別api

      

    getCurrentSession()方法緩存

    

 

  2.三、session對象

    用來操做數據庫的。Sesion至關於JDBC中的Connection。咱們經過session操做PO對象實現增刪改查。安全

    2.3.一、增

      

    2.3.二、改  

      

    2.3.三、刪

      

    2.3.四、查

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

      

    結果:併發

    B.使用session中的load方法ide

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

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

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

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

           該代理與被代理對象之間的關係是繼承關係.與咱們學的動態代理不是一種.因此不須要接口.

    

    出現bug:

    分析:get和load的執行原理

      

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

    

    D.使用Criteria查詢全部數據庫

    

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

    

    2.3.五、總結

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

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

  2.四、Transaction對象

      Transaction封裝了事務的操做

       通常事務的操做中有:

          開啓事務  beginTransaction()

          得到事務  getTransaction()

          提交事務  commit()

          回滾事務  rollback()

      

    細節處理

      

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

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

  2.五、Query對象

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

    

  2.六、Criteria對象(瞭解)

    

    使用like查找

      

    一些基本的查詢條件查詢

    

  2.七、工具類

    咱們知道在使用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;
    }
    
}
相關文章
相關標籤/搜索