優點:
1. 易于上手和掌握。
2. sql寫在xml里,便于統一管理和優化。
3. 解除sql與程序代碼的耦合。
4. 提供映射標簽,支持對象與數據庫的orm字段關系映射
5. 提供對象關系映射標簽,支持對象關系組建維護
6. 提供xml標簽,支持編寫動態sql。
缺點:
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. 若不查詢主鍵字段,容易造成查詢出的對象有“覆蓋”現象。
10. 參數的數據類型支持不完善。(如參數為Date類型時,容易報沒有get、set方法,需在參數上加@param)
11. 多參數時,使用不方便,功能不夠強大。(目前支持的方法有map、對象、注解@param以及默認采用012索引位的方式)
12. 緩存使用不當,容易產生臟數據。
總結:
mybatis的優點其實也是mybatis的缺點,正因為mybatis使用簡單,數據的可靠性、完整性的瓶頸便更多依賴于程序員對sql的使用水平上了。sql寫在xml里,雖然方便了修改、優化和統一瀏覽,但可讀性很低,調試也非常困難,也非常受限,無法像jdbc那樣在代碼里根據邏輯實現復雜動態sql拼接。mybatis簡單看就是提供了字段映射和對象關系映射的jdbc,省去了數據賦值到對象的步驟而已,除此以外并無太多作為,不要把它想象成hibernate那樣強大,簡單小巧易用上手,方便瀏覽修改sql就是它最大的優點了。
mybatis適用于小型且程序員能力較低的項目和人群使用,對于中大型項目來說我并不推薦使用,如果覺得hibernate效率低的話(實際上也是使用不當所致,hibernate是實際上是不適用于擁有高負載的工程項目),還不如直接用sPRing提供的jdbc簡單框架(Template),同樣支持對象映射。
新聞熱點
疑難解答