成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

iBATIS with MapBean應(yīng)用淺析

開發(fā) 后端
iBATIS with MapBean應(yīng)用的淺析向你介紹實際工作中的一點體會,希望對你有一些啟發(fā)。

用了兩年的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語句,但是感覺到項目在自己的控制中

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

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

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

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

  1. public class User {  
  2.   private int id;  
  3.   private String name;  
  4.    
  5.   // 省略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包去掉了,強化一下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的思想

  1. public class MapBean extends HashMap﹤String, Object﹥ {  
  2.  public MapBean() {  
  3.  }  
  4.    
  5.  public MapBean(Object... args) {  
  6.   put(args);  
  7.  }  
  8.    
  9.  public int getInt(Object key) {  
  10.   return getInt(key, 0);  
  11.  }  
  12.    
  13.  public int getInt(Object key, int defaultInt) {  
  14.   Integer i = (Integer) get(key);  
  15.   return i == null ? defaultInt : i;  
  16.  }  
  17.    
  18.  public String getString(Object key) {  
  19.   return (String) get(key);  
  20.  }  
  21.    
  22.  public String getString(Object key, String defaultValue) {  
  23.   String value = (String) get(key);  
  24.   return value == null ? defaultValue : value;  
  25.  }  
  26.    
  27.  public Timestamp getTimestamp(Object key) {  
  28.   return (Timestamp) get(key);  
  29.  }  
  30.    
  31.  public void put(Object... args) {  
  32.   for (int i = 1; i ﹤ args.length; i += 2) {  
  33.    put(String.valueOf(args[i - 1]), args[i]);  
  34.   }  
  35.  }  
  36.    
  37.  public JSONObject toJson() {  
  38.   return JSONObject.fromObject(this);  
  39.  }  
  40.    
  41.  public JSONObject toJson(String... keys) {  
  42.   xxx  
  43.  }  
  44.    
  45.  public String toJsonString() {  
  46.   return toJson().toString();  
  47.  }  

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

  1. 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中加入

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

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

例如具體的SQL xml是這樣的

  1. select id="getWorkManagerSystemRole" resultClass="mapbean" 
  2.  parameterClass="mapbean"﹥  
  3.  select * from work_manager_system_role where 
  4.  system_id=#system_id# and user_id=#user_id#  
  5. ﹤/select﹥ 

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

iBATIS with MapBean應(yīng)用的淺析就向你介紹到這里,希望對你有所幫助。

【編輯推薦】

  1. iBATIS使用之高級查詢技術(shù)詳解
  2. iBATIS分頁源碼真相探討
  3. iBATIS教程之入門淺析
  4. Hibernate與iBATIS的較量淺析
  5. iBATIS實例創(chuàng)建的五大步淺析
責(zé)任編輯:仲衡 來源: 網(wǎng)易博客
相關(guān)推薦

2009-07-16 13:08:09

iBATIS快速創(chuàng)建應(yīng)

2009-07-17 10:59:59

iBATIS接口

2009-07-21 11:12:00

iBATIS配置

2009-07-22 11:11:39

iBATIS分頁實例ObjectDataS

2009-07-16 09:14:26

iBATIS DAO

2009-07-15 17:19:31

iBATIS Ecli

2009-07-22 10:03:11

iBATIS Resu

2009-07-20 18:00:16

iBATIS DAO事

2009-07-22 10:42:59

iBATIS Cach

2009-07-15 17:58:07

iBATIS 動態(tài)映射

2009-07-16 10:23:30

iBATIS工作原理

2009-07-22 15:21:00

iBATIS SQLM

2009-07-15 16:42:03

iBATIS讀寫CLO

2009-07-17 17:05:44

iBATIS緩存cacheModel

2009-07-22 09:44:05

iBATIS Para

2009-07-17 09:44:40

iBATIS教程

2009-07-22 15:01:01

iBATIS SQLM

2009-07-22 16:02:14

iBATIS參數(shù)

2009-07-17 16:49:18

iBATIS XML配

2009-07-15 16:26:04

iBATIS Clob
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 性一交一乱一透一a级 | 久久成人一区 | 国产视频线观看永久免费 | 亚洲精品久久久久久久不卡四虎 | 久久久久久国产精品 | 中文字幕亚洲欧美日韩在线不卡 | av日韩精品 | 美国a级毛片免费视频 | 射久久| 日韩电影免费观看中文字幕 | 久久久91精品国产一区二区精品 | 国产乱码精品1区2区3区 | 天堂久 | 欧美日韩在线国产 | 国产四区 | 毛片软件| 三级成人在线 | 91亚洲国产精品 | 在线观看不卡av | 精品一区国产 | 二区av| 亚洲综合在线视频 | 久久国产日韩欧美 | 91在线精品一区二区 | 日韩乱码在线 | 精品视频一区二区三区 | 欧美一区二区三区大片 | 色婷婷激情 | 天天色综网 | 欧美国产亚洲一区二区 | 国产一区二区三区在线 | 日本 欧美 国产 | 久久久一二三 | 96国产精品久久久久aⅴ四区 | 亚洲国产高清高潮精品美女 | a毛片视频网站 | 亚洲视频免费播放 | 中文字幕综合在线 | 欧美亚洲国产一区二区三区 | 日日日操| 亚洲视频在线看 |