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>

透過 insert 標籤,其 parameterClass 為欲新增的 Book 實體物件

在 # 字號中間的值,最後會被替換成 Book 這個類別所對應到的屬性

所以須跟一開始定義的 Book 類別的屬性相對應

接下來看看 "Read",以下是一個 SELECT 的寫法


<select id="getBook" parameterClass=”int” resultClass="org.pojo.Book">
        SELECT
        ID AS id,
        BOOK_NAME AS bookName,
        BOOK_PRICE AS bookPrice,
        BOOK_CATE AS category
        WHERE id = #value#
</select>

注意以上的寫法如果要讀取出所有欄位可以用 * 字號

但是如果只要特定欄位時,在 SQL 語法中的 AS 後面接的即是 Book 這個類別的屬性名

如果寫錯了,譬如將以上的 bookName 寫成 name,那嚜之後 Book 實體物件

要撈出書名時 透過 Book 物件的 getBookName() 方法得出來的會是 null

當然如果你資料表的欄位名稱跟實體物件的屬性名稱一樣時,就可以不用 AS 語法了

接下來看看 "Update",以下是一個 UPDATE 的典型寫法

<update id="updateBook" parameterClass="org.pojo.Book">
        UPDATE t_book
        SET
        BOOK_NAME = #bookName#,
        BOOK_PRICE = #bookPrice#,
        BOOK_CATE = #category#
        WHERE ID = #id#
</update>

以上的#字號用法和意義跟 INSERT 時為同樣的道理

如果#字號內的值無法對應到 Book  類別的屬性時會發生錯誤

接下來看看 "Delete",以下是一個 DELETE的寫法


<delete id="deleteBook" parameterClass="org.pojo.Book">
        DELETE t_book
        WHERE ID = #id#
</delete>

看完了以上的操作

接下來就介紹 SqlMapClient 的幾個比較常用的 CRUD 方法

1. 從資料庫中讀取資料,以指定 主鍵的方式
    Book book = (Book) sqlMap.queryForObject (“getBook”, new Integer(1));

2. 新增資料到資料庫中
   Book book = new Book();
   book.setId(1);
   book.setBookName("Enjoy Java");
   book.setBookPrice("$ 200");
   book.setCategory("Program");
   sqlMap.insert("insertBook", book);

3. 更新資料表中的某筆資料
    Book book = (Book) sqlMap.queryForObject (“getBook”, new Integer(1));
    book.setBookName("Enjoy J2EE");
    book.setBookPrice("$ 400");
    sqlMap.update("updateBook", book);

4. 刪除某筆資料
    Book book = (Book) sqlMap.queryForObject (“getBook”, new Integer(1));
    sqlMap.delete("deleteBook", book);

沒有留言:

張貼留言