2011年5月29日 星期日

iBatis 教學 - 一對一與一對多

在 ibatis 中如果要操作 1:N 或 1:1 的關聯時,不用像 Hibernate 記很多特殊標籤或屬性

這也是 ibatis 好上手的原因,簡單說它的寫法都很直覺。以下看個 1:1 的例子


<resultMap id="getStudentResult" class=”com.ibatis.example.Product”>
    <result property="student_id" column="STD_ID"/>
    <result property="student_name" column="STD_NAME"/>
    <result property="room" column="STD_ROOM_ID" select="getRoom"/>
</resultMap>

<resultMap id="getRoomResult" class=”com.ibatis.example.Category”>
    <result property="room_id" column="ROOM_ID"/>
    <result property="room_name" column="ROOM_NAME"/>
</resultMap>

<statement id="getStudent" parameterClass="int" resultMap="getStudentResult">
    select * from STUDENT where STD_ID = #value#
</statement>

<statement id="getRoom" parameterClass="int" resultMap="getRoomResult">
    select * from ROOM where ROOM_ID = #value#
</statement>

2011年5月21日 星期六

iBatis 教學 - resultMap 的運用

在 iBatis 中,執行查詢語句時,回傳的結果多為 ResultMap 來處理

通常 ResultMap 能夠將 SELECT 出的結果列值 映射到 Javabean 的屬性值上  以下看看一個簡單的範例


<resultMap id="allProductManager" class="org.pojo.ProductManager">
        <result property="id" column="PM_ID"/>
        <result property="account" column="PM_ACCOUNT"/>
        <result property="name" column="PM_NAME"/>
        <result property="idcode" column="PM_IDCODE" nullValue="-1"/>
</resultMap>


resultMap 的標籤中 id 屬性能夠讓 select 或是其他的 statement 進行識別,所以切記它要唯一

class 屬性告訴 resultMap 要將結果映射到哪個 Javabean 上

在 resultMap 的內容區還要加上 result 標籤才能將資料表的欄位和 Javabean 的屬性作關聯

result 標籤除了 column 和 property 屬性之外,大概還有如下列的其他屬性

1. nullValue : 當此欄位在資料表中為 null 時,映射到 Javabean 時就以 nullValue 的值表示

2. javaType : 通常在正常情況下都會透過反射而得到 Javabean 的屬性型態

2011年5月19日 星期四

【Java Web】commons-fileUpload 使用方法

說到檔案上傳,可以直接採用讀取串流的方式,例如之前的文章 檔案上傳多檔上傳

以上兩篇文章都是用擷取串流的方式,不過做法不同,如果要採用的話盡量以多檔上傳那篇比較好

但是相對的在寫程式時就要顧慮到很多東西,所以可以採用現在比較常用的檔案上下傳的模組

本篇來介紹一下 Apache 的 Commons-fileUpload 說實在的 它比 jspSmartUpload 好用太多了

包含對中文亂碼的處理,相信用過 jspSmartUpload 的人都知道這個困擾

要使用 Commons-fileUpload 的話必須先到 Apache 下的目錄將它下載下來

將 JAR 檔加到你的Java Web 專案中的 WEB_INF 的 lib 裡,就可以了

接下來在次說明一下檔案上傳時的網頁欄位寫法要點,記得就是

要將 form 表單的 enctype 屬性設定成 "multipart/form-data"

接下來就剩下請求路徑的 Servlet 的寫法了,以下以一個範例作呈現

2011年5月17日 星期二

【Java】Object 的 clone 運用

Java 中  java.lang.Object 複製(Clone),提供了複製一個物件的新做法

通常在複製物件的時候,大多數直覺都是直接把一個物件 assign 給另外一個物件

譬如以下範例:

  //....
    Book book1 = new Book();
  book1.setId(1);
  book1.setBookName("Java Study");

    /*以下複製一個新的Book物件*/
  Book book2 = book1;
  System.out.println("Id " + book2.getId() + "Name : " + book2.getName());
  //....

以上程式用很直覺的方法複製了一個物件,之後book2 Console 出來的值,即會同 book1

如果要採用 Object 的 clone() 方法複製物件的話,需如以下指定的步驟

1.在欲被複製的類別中實作 Cloneable 介面
public class Book implements Cloneable{
    //.....
}

2011年5月15日 星期日

【FLEX】Eclipse + Myeclipse + Flex Builder 3.0.2 Eclipse Plug-in

由於最近工作需求,需要會點 FLEX + pureMVC 所以以下介紹一下開發環境的基本配置

我採用的是不使用 Flex Builder 來開發 Flex app

這樣如果你開著 Eclipse 又開 Flex Bulider 的話是蠻吃資源的

不過還好 Adobe 有提供類似這樣子一個 Eclipse 的外掛可供 Eclipse 的開發者使用

首先先到 Eclipse 的下載頁面 http://www.eclipse.org/downloads/

下載最基本的 Eclipse(第一個),這裡可以不用下載 WTP 其實比較起來

WTP 的功能比較陽春,所以就乾脆下載不含 WEB 開發的 Eclispe 之後再掛上 MyEclipse

下載完成之後解壓縮並到目錄下找到 eclipse.ini 並將 -Xmx384m 改成 -Xmx512m

完成後就可以開始配置 MyEclipse 了,開啟 Eclipse 並選取如下

2011年5月14日 星期六

iBatis 教學 - CRUD 基礎操作

針對 iBatis 對資料的基本四大操作中,看看他們的映射文件是如何撰寫的

先來看看本篇用的實體物件 Book

import org.pojo.Book
public class Book{
    private int id;
    private String bookName;
    private String bookPrice;
    private String category
   
    //other getter and setter...
}

首先先來看 "Create",以下是一個在映射檔中的簡單 INSERT 寫法


<insert id="insertBook" parameterClass="org.pojo.Book">
        INSERT INTO
        t_book (ID, BOOK_NAME, BOOK_PRICE, BOOK_CATE)
        VALUES (#id#, #bookName#, #bookPrice#, #category#)
</insert>

2011年5月13日 星期五

Hibernate 教學 - 一級與二級快取

通常快取的意思是要提升系統方面的效能,簡單作法即是將常用的資料放在快取區之內

而 Hibernate 也有類似的功能,基本上分為一級與二級的快取

也可以說是 Session 和 SessionFactory 的快取

先來看看一級快取這部份,它是屬於 Session 級的快取,其生命週期很短

以下以一個簡單的例子說明

//....
    Session session = HibernateUtil.getSession();  //取得一個 Session
    System.out.println("第一次查詢");

    Book book1 = (Book)session.get(Book.class, new Integer(1));
    System.out.println("書名 : " + book.getName());

    System.out.println("第二次查詢");
    
    Book book2 = (Book)session.get(Book.class, new Integer(1));
    System.out.println("書名 : " + book.getName());

2011年5月12日 星期四

iBatis 教學 - Eclipse 配置與範例

iBatis Apache Software Foundation 中的一項 ORM 的解決方案

說到 iBatis 的話,其主要是能夠大量減少操作資料庫的繁複程式碼

而 iBatis 也是透過類似 Hibernate 的映射文件的XML格式來做 Javabean  SQL 的語句轉換

但這也是它和 Hibernate 不太一樣的地方。我的解釋是 Hibernate 主要是將物件或物件彼此之間的關係透過映射文件對應到資料庫

通常這些物件都是 Entity Type 也有些許是 Value Type例如將一個 User 的實體類別映射到某 table

甚至是連帶的關聯關係和繼承的等等都能透過 Hibernate 的映射文件映射到資料庫

iBatis 則是將Javabean 透過 XML 的設定來和SQL做轉換