簡單比較Spring和Mybatis,幫你更好地選擇和使用

Spring和Mybatis是目前依然還比較流行的兩大框架,比較一下二者的優缺點就會了解其中的緣由,主要仍是對開發者或所開發的項目提供什麼便利的緣由。下面簡要介紹一下二者的優缺點,方便你們來比較。程序員

Mybatis的優缺點:web

優勢:
1.易於上手和掌握。
2.SQL寫在xml裏,便於統一管理和優化。
3.解除SQL與程序代碼的耦合。
4.提供映射標籤,支持對象與數據庫的orm字段關係映射
5.提供對象關係映射標籤,支持對象關係組建維護
6.提供xml標籤,支持編寫動態sql。spring

缺點:
1. sql工做量很大,尤爲是字段多、關聯表多時,更是如此。
2. sql依賴於數據庫,致使數據庫移植性差。
3.因爲xml裏標籤id必須惟一,致使DAO中方法不支持方法重載。
4.字段映射標籤和對象關係映射標籤僅僅是對映射關係的描述,具體實現仍然依賴於sql。(好比配置了一對多Collection標籤,若是sql裏沒有join子表或查詢子表的話,查詢後返回的對象是不具有對象關係的,即Collection的對象爲null)
5. DAO層過於簡單,對象組裝的工做量較大。
6.不支持級聯更新、級聯刪除。
7.編寫動態sql時,不方便調試,尤爲邏輯複雜時。
8.提供的寫動態sql的xml標籤功能簡單(連struts都比不上),編寫動態sql仍然受限,且可讀性低。
9.使用不當,容易致使N+1的sql性能問題。
10.使用不當,關聯查詢時容易產生分頁bug。
11.若不查詢主鍵字段,容易形成查詢出的對象有「覆蓋」現象。
12.參數的數據類型支持不完善。(如參數爲Date類型時,容易報沒有get、set方法,需在參數上加@param)
13.多參數時,使用不方便,功能不夠強大。(目前支持的方法有map、對象、註解@param以及默認採用012索引位的方式)
14.緩存使用不當,容易產生髒數據。sql

總結:
mybatis的優勢其實也是mybatis的缺點,正由於mybatis使用簡單,數據的可靠性、完整性的瓶頸便更多依賴於程序員對sql的使用水平上了。sql寫在xml裏,雖然方便了修改、優化和統一瀏覽,但可讀性很低,調試也很是困難,也很是受限,沒法像jdbc那樣在代碼里根據邏輯實現複雜動態sql拼接。mybatis簡單看就是提供了字段映射和對象關係映射的jdbc,省去了數據賦值到對象的步驟而已,除此之外並沒有太多做爲,不要把它想象成hibernate那樣強大,簡單小巧易用上手,方便瀏覽修改sql就是它最大的優勢了。
mybatis適用於小型且程序員能力較低的項目和人羣使用,對於中大型項目來講我並不推薦使用,若是以爲hibernate效率低的話(實際上也是使用不當所致,hibernate是其實是不適用於擁有高負載的工程項目),還不如直接用spring提供的jdbc簡單框架(Template),一樣支持對象映射。數據庫


spring的優缺點:編程

優勢:
a.Spring能有效地組織你的中間層對象,無論你是否選擇使用了EJB。若是你僅僅使用了Struts或其餘爲J2EE的 API特製的framework。Spring致力於解決剩下的問題。
b.Spring能消除在許多工程中常見的對Singleton的過多使用。根據個人經驗,這是一個很大的問題,它下降了系統的可測試性和麪向對象的程度。
c.經過一種在不一樣應用程序和項目間一致的方法來處理配置文件,Spring能消除各類各樣自定義格式的屬性文件的須要。曾經對某個類要尋找的是哪一個魔法般的屬性項或系統屬性感到不解,爲此不得不去讀Javadoc甚至源編碼?有了Spring,你僅僅須要看看類的JavaBean屬性。Inversion of Control的使用(在下面討論)幫助完成了這種簡化。
d.經過把對接口編程而不是對類編程的代價幾乎減小到沒有,Spring可以促進養成好的編程習慣。
e.Spring被設計爲讓使用它建立的應用盡量少的依賴於他的APIs。在Spring應用中的大多數業務對象沒有依賴於Spring。
f.使用Spring構建的應用程序易於單元測試。
g.Spring能使EJB的使用成爲一個實現選擇,而不是應用架構的必然選擇。你能選擇用POJOs或local EJBs來實現業務接口,卻不會影響調用代碼。
h.Spring幫助你解決許多問題而無需使用EJB。Spring能提供一種EJB的替換物,它們適用於許多web應用。例如,Spring能使用AOP提供聲明性事務管理而不經過EJB容器,若是你僅僅須要與單個數據庫打交道,甚至不須要一個JTA實現。
i.Spring爲數據存取提供了一個一致的框架,不管是使用的是JDBC仍是O/R mapping產品(如Hibernate)。
Spring確實使你能經過最簡單可行的解決辦法來解決你的問題。而這是有有很大價值的。
缺點:使用人數很少、jsp中要寫不少代碼、控制器過於靈活,缺乏一個公用控制器。
 緩存

相關文章
相關標籤/搜索