ORM 是什麼?
物件(Object)是Java中, 處理資料的單位, 不同的函式, 接收的參數型別也都不同; 記錄(Record)則是資料庫中, 儲存資料的單位, 不同的表格, 儲存的記錄格式也都不同. 當儲存在資料庫中的記錄, 要傳送至Java執行環境中被使用, 即需要轉換成適當的物件; Java環境中的物件, 要被儲存在資料庫裡時, 也需要被儲存為特定表格內的記錄. 轉移資料時所一併需要的轉換動作, 即為Object Relational Mapping (ORM).
Eva_ORM 的優勢.
Java環境中的ORM工具, 大部份都是以framework的形式出現. 例如J2EE裡的Entity Bean, Hibernate framework, MyBatis framework; 而有些則是以接近一般工具的形式出現, 例如JDO, JPA framework. 而Eva_ORM比較接近其中的JDO, JPA framework, Hibernate framework. Eva_ORM有著與它們相似的設計理念, 包括自動產生SQL語句, 以Annotation做設定, 但我們卻有著更佳的執行效能, 與更簡單的設定方式.
物件條件為主的操作.
Eva_ORM 之所以能簡單被使用, 是因為提供了許多以物件條件描述為主角的查詢, 刪除, 更新的操作. 原本手工打造的 SQL 語句之所以會複雜, 很大的原因, 是因跨表格的條件, 需要使用到 join 或 subquery, 使得使用者需要處理的細節變得很多; 但現在, 使用者可以直接以物件屬性的方式去指定其它表格的資料, 使用者只需專心於描述物件條件與屬性值間的關係, 相關的SQL語句 Eva_ORM 可以自動去產生.
最少量的資料更新.
Eva_ORM 在更新物件的資料時, 只會更新那些被修改過, 而且其值也有所改變的屬性. 但也可強迫物件中的每個屬性都被更新, 只需另行呼叫相關 ORMapper物件中的 modifyAll 方法, 更新時物件全部的屬性會被重新覆蓋至相對應的記錄欄位.
延遲載入, 分頁查詢, 批次更新, 悲觀鎖定, 與 JDBC 參數的微調.
Eva_ORM 支援延遲載入, 分頁查詢, 批次更新 悲觀鎖定, 與 JDBC 參數的微調, 而且是否延遲載入, 分頁的頁大小, 批次的量大小, 與是否要悲觀鎖定, 都可在每次查詢或更新時做不同的設定, 而JDBC參數的調整則可在每次要取得 Connection 物件時做不同的改變.
簡單解決特殊型別對映與集合型別對映的問題.
有些不能對映至資料庫型別的Java型別, 在以往的 ORM 工具中不能被使用; 或是太複雜的集合關係, 例如一個 '由串列所組成的串列所組成的串列', 也無法在以往的其它 ORM 工具中使用. 而 Eva 能讓使用者自行加入想要的處理, 而且在大部份的情況下, 內建的工具己經可以自動去找出轉換的方法, 無需使用者手動參與.
可將交易做結合.
傳統的物件導向程式設計, 是以程式的組合做為擴充功能的手段的, 這種手段有重用程式碼的優良效果, 為Java程式設計師所熟悉. 但若是涉及資料庫交易的功能時, 想要組織程式卻變得困難重重, 因為兩個交易無法直接去做合併, 但 Eva_ORM 能適當地去完成交易組合的功能. 使用者可以將許多各自有著交易處理的函式 (簡稱短交易), 巢狀地包在一些更大的交易範圍中(簡稱長交易), 當其中一個短交易 rollback 時, 則只會回復那些屬於自己本身的操作, 不會影響其它的短交易; 而最上層, 最長的那個交易 commit 時, 才代表著所有的操作都沒有問題, 才會真正的 commit. 如此, 使用者就能依循物件導向程式設計的習慣, 將現有含有交易的各種小功能重新做出各種組合.
建立與使用 Eva_ORM 應用程式
完整建立與執行Eva_ORM應用程式的理想過程為 :
1. 建立Entity類別與資料表間(table)的對映 :
a. 定義Entity
b. 定義所對映資料表的Schema
2. 執行程式, 定義Property與欄位(column)的對映
a. 讀取現存資料表的metadata, 定義property與欄位的對映.
b. 資料增刪改查.
這個過程被明確分成2個階段. 事實上, 一個Eva_ORM應用程式也能清楚地被分割為至少2個專案, 而這兩個專案分別關係著階段1與階段2.
1. 建立Entity類別與資料表間(table)的對映 :
a. 定義Entity
b. 定義所對映資料表的Schema
2. 執行程式, 定義Property與欄位(column)的對映
a. 讀取現存資料表的metadata, 定義property與欄位的對映.
b. 資料增刪改查.
這個過程被明確分成2個階段. 事實上, 一個Eva_ORM應用程式也能清楚地被分割為至少2個專案, 而這兩個專案分別關係著階段1與階段2.
建立資料表的 Schema.
依前面所提到的, 建立與執行Eva_ORM應用程式的理想過程中的步驟, 在建立完Entity專案之後, 可根據其所產生的Jar檔, 再利用工具去產生建立相對映資料表的schema, 點擊下面網址可執行該工具.
欲執行 Schmea產生工具, 請先自行安裝JRE1.6與JavaFX2.2的執行環境, 且需注意, 自己所使用的瀏覽器應安裝的應是 i586 或 x64 版本的執行環境?
因為 Oracle 對於 Java 的更新上的失誤, Schmea產生工具 近來經常發生 無法順利地下載執行的問題. 所以我們也提供了可執行程式的下載, 請至 下載的頁面 觀看其細節. |
預設支援的資料庫.
你是否真的需要 ORM 工具?
使用者必需要了解, 使用ORM工具所需付出的代價. ORM工具在適當的情況下是一個能幫助使用者的工具, 但若硬要在不適當的地方使用, 只是純粹一種使用ORM工具的執著. 那就失去意義. 我們也相當的鼓勵, 使用者剛開始小規模使用Eva_ORM時, 就可以先將使用Eva_ORM的程式, 與自己手工打造的ORM程式做個比較. 比較效能與方便性與功能需求的支援程度, 做點事前的評估工作. 決定是否需要ORM工具, 或是哪個ORM工具最適合.