hibernate?ejb?以及最近了解到的ibatis?
    ejb歷來以繁瑣著稱,或者稱為重量級。
    hibernate,看看它的hello cat演示很簡單,但實際使用中幾乎沒有那么簡單的情況。一旦業務復雜的話,再考慮上性能等等要求,總覺得也過于重量級。最不爽的是一種情況是如果關系表(就是僅僅包含2個主業務表的數據關聯,可能只有2,3個字段的那種)多一點,一對多,多對多,用起來總感覺象殺雞用牛刀:明明就是幾個關聯簡單處理一下即可,但卻非要換成對象。還要lazy load。呵呵,抱怨一下。我用hibernate,操作上感覺比較舒服的是create和update的時候。最痛苦的是query,次不爽的是delete。
    ibatis,我只是看了一下所謂的demo,就跑了。配置文件復雜的來。。。且把sql寫在配置中,個人總是很難接受這種方式,如果是team work的話,不夠安全的說,總覺得貌似是個人都能改(最怕N個人在同一個xml中配自己的SQL,林子大了什么鳥都有,team人多了,什么問題都會出;這種多人搞一個文件就是問題的最佳孳生點)。

    羅索了這么多,下面說重點,開始總結。
    我覺得目前大部分都基于關系數據庫的現狀,增刪改查四大功能中,【查】,【增】可充分考慮OO思想,【改】可以適用部分OO思想,【刪】則幾乎不用考慮OO。我所指的OO,是以對象的概念來操作的意思。

    【查】,我覺得可以做到調用者自己根據業務組織SQL語句,定義SQL結果數據存儲POJO類,然后調用query方法,完成查詢,并將結果集數據載入到POJO對象中。這個樣子即滿足了大部分的需求。分頁暫不予考慮。
        public List doQuery(String sqlClause, Class pojoClass) throws XException;
            關于這個,我已經有一篇隨筆,且自己已經代碼實現并驗證。所以不多說了。

    【增】,向指定的表插數據是比較容易讓人聯想到對象概念的操作。所以,應該比較適合使用對象。增操作時,指定表名,指定POJO對象實例,調用insert方法。
        public void doInsert(String tableName, Object pojoInstance) throws XException;
            所作的事情:
                1。從數據庫載入表結構(一般來說表結構改動的可能性不大,一次掃描后可緩存)
                2。將POJO對象的get屬性和表的字段,類型關聯起來
                3。構造insert語句。最好再檢查一下字段能否為null等等。
                4。執行insert語句。
            實際上,我覺得還有一種方式雖然對象概念不多,但應該也蠻靈活,好用的。
        public void doInsert(String tableName, Map values) throws XException;
            基本操作思想和上面的一致。不過不需要用反射獲取屬性信息了。直接從map中遍歷即可。

    【改】,更新的字段多時,可能組織為一個POJO對象比較讓人能接受;但如果每次只更新1,2個字段或者針對某個表更新業務比較多(這次是a,b字段,下次是c,d等字段)的話,貌似丟棄對象,直接MAP更方便丫。基本接口和insert類似。個人感覺這是一個比較中間化的操作。
 
    【刪】,一般我們刪除時都是根據主鍵或者某些字段的條件來的。簡單根據主鍵來刪時,貌似用MAP也比較能接受,因為通過指定倆參數,自己可以不用組織SQL,輕微爽的說。復雜點的刪,業務要求組織一個暴惡心的SQL的情況也未嘗不存在,這種情況下,我們最多提供一個直接執行SQL語句的接口即可。

以上純屬個人想法,不甚成熟,隨筆記之,以做備忘。