2011年2月26日 星期六

Hibernate 教學 - Session 與 SessionFactory

SessionFactory
通常在應用程式裡面是透過 SessionFactory 來獲取一個 Session 物件

且 SessionFactory 保存了產生 SQL 的語句以及 Hibernate 運行時所有的映射關係

而在一般的情況下,整個應用程式只有一個 SessionFactory

所以通常會在應用程式初始的時候,執行 SessionFactory 的創建,以便後續各模組使用

例如以下程式表示

package org.control;
import org.hibernate.cfg.Configuration;
import org.hibernate.SessionFactory;
public class HibernateUtil {
    private static final SessionFactory sessionFactory;   //將 SessionFactory 宣告為靜態變數
    static {
        try {
            sessionFactory = new Configuration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Log the exception. 
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }
    //之後的任何程式或模組需要取的 session 時, 就可以共通的取用此 SessionFactory
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

2011年2月18日 星期五

Hibernate 教學 - 值型別的 Component

以上一篇的"一對多(Value Type)"為例,只有實做出 Person 類別,而沒有所謂的 Email 類別

以值型別的定義,一個物件中如果沒有一個能識別物件的屬性且對應到資料庫的主鍵的話通常稱為值型別

而在一對多的例子當中,實際上並沒有 Email 這個類別,如果有需求才會建立該類別

譬如你需要記住每個 email 的長度、密碼、種類....等,這時候的確可以建立一個 Email 類別

class Email{
    private String emailName;     
    private String password;
    private int length;
    private String emailType; //例如yahoo或是gmail hotmail 等
}

以上一篇的"一對多(Value Type)"為例,雖然 email 在資料庫中有相對應的資料表

但剛剛 Email 類別中並無任何一個屬性對應資料庫的主鍵,

這時候要如何將 Email 物件的屬性資料映射到資料庫中就要利用 Component

這邊我以 Employee 和 Photo 為範例

2011年2月17日 星期四

Hibernate 教學 - 基礎簡介

建立第一個 Hibernate 範例
1.建立 Hibernate 配置文件  hibernate.cfg.xml
2.設計 Account 資料表
3.建立 Account 實體
4.建立 Account 實體的映射文件 Account.hbm.xml
5.將 Account 的配置文件加入到 hibernate.cfg.xml
6.最後寫個簡單的 JSP 來測試

建立 Hibernate 配置文件  hibernate.cfg.xml

  
    
    org.hibernate.dialect.MySQLDialect
    com.mysql.jdbc.Driver
    
    jdbc:mysql://localhost:3306/hibernate
    
    root
    
    z123456
    
    true
  


Hibernate 的配置文件是他的核心,以上的配置足夠告訴 Hibernate 該如何去連接資料庫另外一個重點就是配置文件存放了所有的的映射文件,在 Eclipse 中,需將此配置文件加入到 src 目錄下才會生效

2011年2月12日 星期六

【Java WEB】HttpSessionBindingListener 實現用戶監控

HttpSessionBindingListener 為一個在 javax.servlet.http 的監聽器

通常我們可以 HttpSessionBindingListener 來監控用戶的在線狀態

而 HttpSessionBindingListener 的運用即是架構在 HttpSession 的屬性的繫結(binding)與釋放(unbinding),且運用 HttpSessionBindingListener 不必再 web.xml 中註冊監聽器

以下以一個 UserInfo 類別來保存所有上線的使用者
package com.model;
import java.util.Vector;
public class UserInfo 
{
    /** 這裡採用一個靜態變數 使得每個 UserInfo 都擁有, 即所有的加入和移除用戶都是透過此 靜態變數**/
    private static UserInfo user = new UserInfo();
    private Vector list = null;
    public UserInfo(){
        this.list = new Vector();
    }
    public static UserInfo getInstance(){  //取得該靜態變數 UserInfo 
        return user;
    }
    public boolean addUser(String user){   //加入一個用戶  代表上線
        if(user != null){
            this.list.add(user);
            return true;
        }else{
            return false;
        }
    }
    public Vector getList(){   
        return this.list;
    }
    public void removeUser(String user){    //移除某一個線上用戶  代表下線
        if(user != null){
            this.list.removeElement(user);
        }
    }
}

2011年2月6日 星期日

【Java XML】JDOM 介紹

再 JAVA 的開發環境裏如果要生成 XML 檔或是針對 XML 檔作分析時

最直接的方法可以直接針對 XML 的格式輸出或是轉成 String 型態來擷取想要的資訊

但往往這樣做複雜且也容易出錯,因此可以使用 JDOM 來解析 XML

首先先到 http://www.jdom.org 下載 JDOM 的類別庫,目前最新版為 1.1.1

下載完並解壓縮後在 jdom 目錄下的 build 會有一個 jdom.jar,將它加到你的路徑中

就可以用 JDOM 來開發 XML 了,以下先介紹 JDOM 是如何解析 XML 的

org.jdom.input.SAXBuilder 類別:
當要讀取 XML 時,要使用 org.jdom.input 下的 SAXBuilder 搭配輸入串流來建構 XML 檔


org.jdom.Document 類別:
代表了你這份 XML 的物件