天天看點

Hibernate 單例模式建立sessionFactory測試類

  java中單例模式是一種常見的設計模式,單例模式的寫法有好幾種,懶漢式單例、餓漢式單例、登記式單例。

  單例模式有以下特點:

  1、單例類隻能有一個執行個體。

  2、單例類必須自己建立自己的唯一執行個體。

  3、單例類必須給所有其他對象提供這一執行個體。

    單例模式確定某個類隻有一個執行個體,而且自行執行個體化并向整個系統提供這個執行個體。在計算機系統中,線程池、緩存、日志對象、對話框、列印機、顯示卡的驅動程式對象常被設計成單例。這些應用都或多或少具有資料總管的功能。每台計算機可以有若幹個列印機,但隻能有一個Printer Spooler,以避免兩個列印作業同時輸出到列印機中。每台計算機可以有若幹通信端口,系統應當集中管理這些通信端口,以避免一個通信端口同時被兩個請求同時調用。總之,選擇單例模式就是為了避免不一緻狀态,避免政出多頭。

建立sessionFactory

package com.hlg.whd.controller;  
  
import org.springframework.context.annotation.Configuration;  
  
  
public class HibernateUtils {  
    //聲明一個私有的靜态final類型的Configuration  
    private static final Configuration config;  
    //聲明一個私有的靜态final類型的SessionFactory對象  
    private static final SessionFactory factory;  
    //通過靜态代碼塊建構SessionFactory  
    static{  
        config=new Configuration().configure();  
        factory=config.buildSessionFactroy();  
    }  
    //提供一個公有的靜态方法供外部擷取,并傳回一個Session對象  
    public static Session getSession(){  
        return factory;  
    }  
} 
           

上述代碼聲明了一個私有的final類型的Configuration對象和SessionFactory對象,供類中的成員使用,通過靜态方法建構SessionFactory執行個體,最後提供了一個公有的靜态方法供外部擷取session對象。

測試類

public class test {    
    @Test    
        public void selectStu(){    
              Session session = HibernateUtils.getSession();    
              Transaction t = session.beginTransaction();    
              Costmer s = (Costmer) session.get(Costmer.class,1);    
              System.out.println(s.toString());
              t.commit;
        }    
}    
           

實體類

package com.hlg.whd;

public class Costmer {
	private int id;
	private String username;
	private String password;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "Costmer [id=" + id + ", username=" + username + ", password="
				+ password + "]";
	}
	

}
           

繼續閱讀