如何進(jìn)行iBATISwithMapBean應(yīng)用的淺析

如何進(jìn)行iBATIS with MapBean應(yīng)用的淺析,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

十余年創(chuàng)新互聯(lián)網(wǎng)站建設(shè),由一走到現(xiàn)在,當(dāng)中離不開團(tuán)隊頑強(qiáng)的創(chuàng)業(yè)精神,離不開伴隨我們同行的客戶與專業(yè)的合作伙伴,創(chuàng)力信息一直秉承以“見一個客戶,了解一個行業(yè),交一個朋友”的方式為經(jīng)營理念,提出“讓每一個客戶成為我們的終身客戶”為目標(biāo),以為用戶提供精細(xì)化服務(wù),全面滿足用戶需求為宗旨,誠信經(jīng)營,更大限度為用戶創(chuàng)造價值。期待邁向下一個更好的十余年。

用了兩年的Hibernate之后,對ORM深有感觸。一方面,ORM可以令到我們從OO角度來思考數(shù)據(jù),屏蔽了數(shù)據(jù)庫的差異(其實Hibernate被吹的最厲害就是那個分頁,其實分頁沒什么技術(shù)含量,而且ROR都把分頁從核心抽離了)。另一方面,性能問題,例如必須select才能update,必須select全部,必須update全部,cache帶來的后遺癥,JavaBean關(guān)聯(lián)問題(一對多,多對一,多對多等),lazyload問題。當(dāng)然,小型項目是很有優(yōu)勢的

Hibernate一直說,他生成的sql比一般程序員的要好,可以減少很多問題。但是,我倒是認(rèn)為用Hibernate反而因為對程序員的要求更高導(dǎo)致更多問題。而且我現(xiàn)在認(rèn)為,SQL才是王道,至少目前是。

于是在新項目中啟用iBATIS,這一年來的使用感覺很不錯,全程使用細(xì)粒度的SQL語句,雖然多寫了很多SQL語句,但是感覺到項目在自己的控制中

我只用了iBATIS40%不到的功能,可能大家會覺得不可思議。我沒有用cache,沒有用關(guān)聯(lián),沒有用resultMap,甚至,連JavaBean也沒有用

在大家都在討論P(yáng)O,VO,DTO的時候,我的系統(tǒng)里面一個JavaBean都沒有

首先我問問,JavaBean是用來做什么的,存儲數(shù)據(jù),每一個PO,其實就約等于一個表里面的一行數(shù)據(jù)

我舉一個真實一點的例子,一個user表

public class User {    private int id;    private String name;       // 省略getter/setter一大段  }

不知道大家有沒有用eclipse生成JavaBean getter/setter的痛苦,至少非??菰?。整個JavaBean實現(xiàn)了什么功能?完全沒有

好了我開謎底了,我用的是HashMap

什么,HashMap?是不是聽錯了

沒聽錯,請問有什么事情是上面那個那么普通的JavaBean能做到的,而HashMap不能做到的呢

用HashMap沒有具體屬性的類型啊,那不是變成動態(tài)語言一樣了,而且我要在JavaBean里面加邏輯怎么辦

好吧,這是我想到的兩個問題(如果你也有別的問題可以留意提出來)

首先,現(xiàn)在不同以前了,動態(tài)語言的優(yōu)勢慢慢提高了,像動態(tài)語言有什么不好,我從ROR里面學(xué)了很多不錯的思想

其次是要加邏輯怎么辦,這個問題,之前在Javaeye討論充血模型還是貧血模型不可開交,***還是沒什么結(jié)論,目前還是一片貧血的情況,你可以翻一下你的項目里面的JavaBean,至少大多數(shù)的Bean都是沒有意義的getter/setter。BO跟PO混雜在一起也很多人不建議的。至于邏輯,大可以寫在util包里面,我都把整個model包去掉了,強(qiáng)化一下util不成么,呵呵

再次,數(shù)據(jù)庫的列,跟JavaBean的屬性兩者,本來就是冗余的,如果我們修改數(shù)據(jù)庫結(jié)構(gòu),就還要修改相應(yīng)的JavaBean,或者影射文件。當(dāng)然我這種做法更依賴數(shù)據(jù)庫。另外,ROR的名字轉(zhuǎn)換功能可以令到代碼中的調(diào)用名字更好看一些,我覺得也不是非常有必要的實現(xiàn)

直接使用HashMap不太方便,尤其是類型轉(zhuǎn)換上,于是我實現(xiàn)了一個MapBean的類,其實這個類很簡單,關(guān)鍵是用HashMap代替JavaBean的思想

public class MapBean extends HashMap﹤String, Object﹥ {   public MapBean() {   }      public MapBean(Object... args) {    put(args);   }      public int getInt(Object key) {    return getInt(key, 0);   }      public int getInt(Object key, int defaultInt) {    Integer i = (Integer) get(key);    return i == null ? defaultInt : i;   }      public String getString(Object key) {    return (String) get(key);   }      public String getString(Object key, String defaultValue) {    String value = (String) get(key);    return value == null ? defaultValue : value;   }      public Timestamp getTimestamp(Object key) {    return (Timestamp) get(key);   }      public void put(Object... args) {    for (int i = 1; i ﹤ args.length; i += 2) {     put(String.valueOf(args[i - 1]), args[i]);    }   }      public JSONObject toJson() {    return JSONObject.fromObject(this);   }      public JSONObject toJson(String... keys) {    xxx   }      public String toJsonString() {    return toJson().toString();   }  }

這個類主要是方便做類型轉(zhuǎn)換,加入了getInt,getString等方法,另外因為我的系統(tǒng)里面大量使用了JSON,也有一些HashMap向JSON轉(zhuǎn)換的輔助方法,還有一個特別處理過的put方法和構(gòu)造器,有什么用呢,看下面的例子

MapBean params = new MapBean("id",userId,"name",username,"sex",0,"online",true);

如果你直接用HashMap實現(xiàn)以上功能,要寫五行代碼,就這個差別而已,呵呵

當(dāng)然如果你用JavaBean的話,你也可以寫一個對應(yīng)的構(gòu)造函數(shù)

接下來,我們在sql-map-config.xml中加入

﹤typeAlias alias="mapbean" type="xxxxxxx.MapBean" /﹥

就可以用mapbean的別稱來引用這個類了

例如具體的SQL xml是這樣的

﹤select id="getWorkManagerSystemRole" resultClass="mapbean"  parameterClass="mapbean"﹥   select * from work_manager_system_role where  system_id=#system_id# and user_id=#user_id#  ﹤/select﹥

其實我已經(jīng)把iBATIS當(dāng)成SQL wrapper來用了,我曾經(jīng)評估過Spring的JDBC Template,不過功能始終差少少,或許以后我把JDBC Template再強(qiáng)化一下來代替iBATIS吧。

看完上述內(nèi)容,你們掌握如何進(jìn)行iBATIS with MapBean應(yīng)用的淺析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

文章題目:如何進(jìn)行iBATISwithMapBean應(yīng)用的淺析
URL地址:http://muchs.cn/article4/ipgpoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、定制開發(fā)網(wǎng)站設(shè)計公司、品牌網(wǎng)站建設(shè)建站公司、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司