怎麼樣才能讓SSI更敏捷

以Ext+Struts+Srping+iBatis組合方式爲例,這四個組件分工協作,如何讓協作更有效開發更敏捷?

1.Ext作爲呈現層,主要作爲數據的呈現和數據的組織;

2.Action作爲請求和跳轉的門面,將Ext中的Json請求數據或者XML請求數據轉爲Java對象,並調用不同的Service實例進行處理;

3.Spring的DI、AOP、事務管理爲開發帶來了高效的實現和耦合度的降低。

4.iBatis主要作用實現對象和關係(數據庫)的映射。

問題:

查詢往往是一個項目或者產品中最爲出色、使用頻繁的功能,iBatis的強大之處在於手寫SQL語句方便靈活,便於實現高效的查詢,這一點對於項目特別是大數據量的項目是非常有效的。同時這也是iBatis來說也是很大的缺血,即手寫SQL的內容龐大,諸如刪除、修改、增加操作往往不需要很大的靈活性,這點Hibernate做的就更出色了,如此iBatis一定程度上也降低了開發的效率。同時iBatis對查詢的支持也是有諸多不便之處的。

我們來看這樣的一組查詢語句:

SELECT field1,field2,field3,....,fieldn,... FROM table_name WHERE expression1 AND expression2 or expression2 ... AND ... or ....ORDER BY field1 ASC, field2 DESC,... 

這樣的SQL語句是很普通的查詢,如果用iBatis會怎麼樣呢?下面給出iBatis的一種實現方式:

<select id="identify" resultMap="beanMap">
  SELECT field1,field2,field3,....,fieldn,...  FROM table_name
  <dynamic prepend="WHERE">  
   <isNotEmpty property="property1"  prepend="AND">
    field1= #property1#
   </isNotEmpty >
   <isNotEmpty property="property2" prepend="OR">
    field1 = #property2#
   </isNotEmpty>  ....
  </dynamic>
  ORDER BY field1 ASC, field2 DESC,... 
 </select>

 

這樣的iBatis配置SQL語句存在什麼問題嗎?相信仔細觀察我們就能發現問題:

WHERE條件是動態的,其他如查詢字段、排序字段都是靜態寫死了的。當然這樣的SQL配置寫法能夠滿足80%以上的查詢需求,可是那剩下的20%呢?熟悉二八定律的人都知道20%在項目中的舉足輕重,那麼我們怎麼改造這個SQL語句配置呢?

(待續... ...)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章