3 回答

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊
優(yōu)點(diǎn):
1. 易于上手和掌握。
2. sql寫在xml里,便于統(tǒng)一管理和優(yōu)化。
3. 解除sql與程序代碼的耦合。
4. 提供映射標(biāo)簽,支持對(duì)象與數(shù)據(jù)庫(kù)的orm字段關(guān)系映射
5. 提供對(duì)象關(guān)系映射標(biāo)簽,支持對(duì)象關(guān)系組建維護(hù)
6. 提供xml標(biāo)簽,支持編寫動(dòng)態(tài)sql。
缺點(diǎn):
1. sql工作量很大,尤其是字段多、關(guān)聯(lián)表多時(shí),更是如此。
2. sql依賴于數(shù)據(jù)庫(kù),導(dǎo)致數(shù)據(jù)庫(kù)移植性差。
3. 由于xml里標(biāo)簽id必須唯一,導(dǎo)致DAO中方法不支持方法重載。
4. 字段映射標(biāo)簽和對(duì)象關(guān)系映射標(biāo)簽僅僅是對(duì)映射關(guān)系的描述,具體實(shí)現(xiàn)仍然依賴于sql。(比如配置了一對(duì)多Collection標(biāo)簽,如果sql里沒(méi)有join子表或查詢子表的話,查詢后返回的對(duì)象是不具備對(duì)象關(guān)系的,即Collection的對(duì)象為
null
)
5. DAO層過(guò)于簡(jiǎn)單,對(duì)象組裝的工作量較大。
6. 不支持級(jí)聯(lián)更新、級(jí)聯(lián)刪除。
7. 編寫動(dòng)態(tài)sql時(shí),不方便調(diào)試,尤其邏輯復(fù)雜時(shí)。
8 提供的寫動(dòng)態(tài)sql的xml標(biāo)簽功能簡(jiǎn)單(連struts都比不上),編寫動(dòng)態(tài)sql仍然受限,且可讀性低。
9. 使用不當(dāng),容易導(dǎo)致N+1的sql性能問(wèn)題。
10. 使用不當(dāng),關(guān)聯(lián)查詢時(shí)容易產(chǎn)生分頁(yè)bug。
11. 若不查詢主鍵字段,容易造成查詢出的對(duì)象有“覆蓋”現(xiàn)象。
12. 參數(shù)的數(shù)據(jù)類型支持不完善。(如參數(shù)為Date類型時(shí),容易報(bào)沒(méi)有g(shù)et、set方法,需在參數(shù)上加@param)
13. 多參數(shù)時(shí),使用不方便,功能不夠強(qiáng)大。(目前支持的方法有map、對(duì)象、注解@param以及默認(rèn)采用012索引位的方式)
14. 緩存使用不當(dāng),容易產(chǎn)生臟數(shù)據(jù)。
總結(jié):
mybatis的優(yōu)點(diǎn)其實(shí)也是mybatis的缺點(diǎn),正因?yàn)閙ybatis使用簡(jiǎn)單,數(shù)據(jù)的可靠性、完整性的瓶頸便更多依賴于程序員對(duì)sql的使用水平上了。sql寫在xml里,雖然方便了修改、優(yōu)化和統(tǒng)一瀏覽,但可讀性很低,調(diào)試也非常困難,也非常受限,無(wú)法像jdbc那樣在代碼里根據(jù)邏輯實(shí)現(xiàn)復(fù)雜動(dòng)態(tài)sql拼接。mybatis簡(jiǎn)單看就是提供了字段映射和對(duì)象關(guān)系映射的jdbc,省去了數(shù)據(jù)賦值到對(duì)象的步驟而已,除此以外并無(wú)太多作為,不要把它想象成hibernate那樣強(qiáng)大,簡(jiǎn)單小巧易用上手,方便瀏覽修改sql就是它最大的優(yōu)點(diǎn)了。
mybatis適用于小型且程序員能力較低的項(xiàng)目和人群使用,對(duì)于中大型項(xiàng)目來(lái)說(shuō)我并不推薦使用,如果覺(jué)得hibernate效率低的話(實(shí)際上也是使用不當(dāng)所致,hibernate是實(shí)際上是不適用于擁有高負(fù)載的工程項(xiàng)目),還不如直接用spring提供的jdbc簡(jiǎn)單框架(Template),同樣支持對(duì)象映射。
- 3 回答
- 0 關(guān)注
- 962 瀏覽
添加回答
舉報(bào)