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 的物件


2011年1月31日 星期一

【C++】指標與位址

C 語言和 C++ 都有提供操作計憶體的方法,亦為指標,也就是說你可以宣告依個變數來儲存記憶體位址

故指標變數所儲存的並不是值,而是值在記憶體中的位址,在 C++ 要取得變數的記憶體位址

變數的記憶體位址
可以加上一個 & 運算子,以下範例
#include 
using namespace std;
int main(void)
{
    int num = 10;
    double num1 = 10.1;
    count << "the value of num is" << num;
    count << "and it's address is " << &num <<"\n";  //印出 num 的記憶體位址
    count << "the value of num1 is" << num1;
    count << "and it's address is " << &num1 <<"\n";   //印出 num1 的記憶體位址
    system("pause");
    return 0;
}

指標變數的用法

那如何宣告指標變數並存取記憶體位址或是實際的值呢? 只要在變數名稱前面加個*就好了
至於要如何存取指標所指到的變數值和位址呢?

*pointer 就是取出指標變數所指到的變數之值
pointer 即是取出指標變數所指到的變數之記憶體位址

2011年1月29日 星期六

【Java Web】DAO 簡介

DAO 主要是讓處理及操作資料庫更為方便,用來封裝資料庫持久層的操作

即可將很多複雜的資料操作語法和業務邏輯分開

探討其思想其實也是一種 ORM 的概念,以下簡介其基本組成

通常會有一個 DAO 的介面以及一個 DAO 的實現類別

以下以一個用戶註冊或登錄的過程做介紹,首先先來看一下 DAO Interface
package fsc.regLog.dao
public interface UserDao
{
    //登入時,如果成功即回傳一個封裝後的 User 物件,
    public User login(String username, String password);
    //註冊
    public void register(User u);
    //檢查 User 是否存在
    public boolean checkUser(User u);
}

2011年1月25日 星期二

Struts 教學 - DynaActionForm

在頁面中如果有過多的 Action 處理可能會導致需要大量的 ActionForm

而透過 DynaActionForm 則可以不必建立一個個的 ActionForm,而減少ActionForm 的數量

首先在使用 DynaActionForm 時跟 ActionForm 一樣須在 struts-config.xml 中的 form-beans 中設定

以下為範例程式,透過 form-bean 的 type 屬性設定為 org.apache.struts.DynaActionForm
即可建立一個動態的 ActionForm

<form-beans>
    <form-bean name="loginForm" type="org.apache.struts.DynaActionForm">
<!-- form-property 標籤設定了表單中所有對應的參數 -->
<!-- name屬性指定了參數名稱, type屬性則是屬性的型態 -->
<form-property name="account" type="java.lang.String" >
<form-property name="username" type="java.lang.String" >
<form-property name="password" type="java.lang.String" >
</form-bean>
</form-beans>

2011年1月22日 星期六

JSP 教學 - 動態輸出 HTML 樹狀結構

HTML 的樹狀結構東常有很多做法,在很多網站上譬如說部落格裡以時間來顯示文章的部份

即是一種樹狀結構,一般在 HTML裡能讓使用者點及某標籤及展開內容的作法

通常都是透過 CSS 中的 display:none; 來達成,以下範例以 span 標籤為例

以下的水藍色地假設很重要喔 等等 JSP 程式會用到

<span id="spanID" onClick='showhide('show')' >//假設這邊叫標頭
    <p>點我展開</p>
<span>
<span id="show" style="display:none;">  //假設這邊叫內容

<ul>
        <li><a href="http://tw.yahoo.com/">YAHOO</li>
        <li><a href="http://www.google.com.tw/">Google</li>
        <li><a href="http://www.youtube.com/">Youtube</li>

</ul>
</span>

2011年1月19日 星期三

Struts 教學 - Eclipse 環境配置

來介紹一下如何在 Eclipse 中建置 J2EE 的 Struts 框架,

拿來和 Netbeans 比較,Eclipse 在針對眾多的 Framework 的開發比較麻煩點   之前用 Netbeans 開發時

在建置 WEB 專案就可以選擇要使用的框架,並且將其配置完成連開發過程都幫你用好

Eclipse 也可以達到這樣的情形,但需要一些 plug-in  但如果對於一個初學者來說

我是建議先暫時不要用 Plug-in,沒用還是可以開發的只是麻煩點而已

但你可以學到更多東西,應該說你會更熟悉程式碼,本篇就不用 Plug-in 來配置

如果要用的話可以去 google 上找一下  "easystrut"

首先先到 http://struts.apache.org/download.cgi 下載最新版  Struts 1.3.10