Mybatis的缺陷

Mybatis是業(yè)界非常流行的持久層框架,輕量級(jí)、易用,在金融IT領(lǐng)域完全是領(lǐng)軍地位,比Hibernate更受歡迎,優(yōu)勢(shì)非常多,也是非常值得我們學(xué)習(xí)的。但Mybatis并不盡善盡美,其自身的設(shè)計(jì)、編碼也還有許多不足,甚至是缺陷,這篇文章來(lái)簡(jiǎn)要討論一下這些缺陷:

1.Mybatis使用DTD作為XML配置文件的校驗(yàn)文件,但是很明顯,DTD差不多是快被淘汰的技術(shù)了,功能非常有限,擴(kuò)展性非常差,擴(kuò)展性非常差,擴(kuò)展性非常差,可讀性也不好,Spring能夠從DTD到XSD華麗轉(zhuǎn)身,但Mybatis始終沒(méi)這個(gè)魄力。

2.版本兼容性做的不好,就拿3.3.0—>3.4.0來(lái)說(shuō),按業(yè)界通用規(guī)范,第2級(jí)版本號(hào)升級(jí),可以添加功能,但是要保證向下兼容性,然而Mybatis的做法并不完全是這樣的,看一下關(guān)鍵接口StatementHandler的關(guān)鍵方法prepare:

復(fù)制代碼
// 3.3.0 Statement prepare(Connection connection) throws SQLException; // 3.4.0 Statement prepare(Connection connection, Integer transactionTimeout) throws SQLException;
復(fù)制代碼

這里沒(méi)有添加一個(gè)方法,而是直接在原方法中添加了一個(gè)參數(shù)!類(lèi)似例子還有不少,就不一一列舉了。

3.Mybatis的插件,采用一個(gè)通用的Interceptor接口,配以@Intercepts、@Signature等注解,實(shí)現(xiàn)對(duì)多個(gè)組件的多種方法的攔截,看似非常靈活,在我看來(lái)其實(shí)是結(jié)構(gòu)不夠清晰,實(shí)際開(kāi)發(fā)時(shí),你會(huì)把對(duì)StatementHandler和ResultSetHandler的攔截增強(qiáng)放在一個(gè)類(lèi)里面嗎?不會(huì)是吧(會(huì)?你當(dāng)單一職責(zé)原則、開(kāi)閉原則都是狗屎?jiǎn)幔?,那有什么必要?qiáng)制使用同一個(gè)接口呢?

另外,使用@Signature注解來(lái)設(shè)別需要被攔截的組件方法,如果注解有錯(cuò),編譯也是不會(huì)報(bào)錯(cuò)的,而只能等到運(yùn)行時(shí)才

網(wǎng)友評(píng)論