Mybatis是业界非常流行的持久层框架,轻量级、易用,在金融IT领域完全是领军地位,比Hibernate更受欢迎,优势非常多,也是非常值得我们学习的。但Mybatis并不尽善尽美,其自身的设计、编码也还有许多不足,甚至是缺陷,这篇文章来简要讨论一下这些缺陷:

1.Mybatis使用DTD作为XML配置文件的校验文件,但是很明显,DTD差不多是快被淘汰的技术了,功能非常有限,扩展性非常差,扩展性非常差,扩展性非常差,可读性也不好,Spring能够从DTD到XSD华丽转身,但Mybatis始终没这个魄力。

2.版本兼容性做的不好,就拿3.3.0—>3.4.0来说,按业界通用规范,第2级版本号升级,可以添加功能,但是要保证向下兼容性,然而Mybatis的做法并不完全是这样的,看一下关键接口StatementHandler的关键方法prepare:

移动开发培训,Android培训,安卓培训,手机开发培训,手机维修培训,手机软件培训

// 3.3.0Statement prepare(Connection connection)      throws SQLException;// 3.4.0Statement prepare(Connection connection, Integer transactionTimeout)      throws SQLException;

移动开发培训,Android培训,安卓培训,手机开发培训,手机维修培训,手机软件培训

这里没有添加一个方法,而是直接在原方法中添加了一个参数!类似例子还有不少,就不一一列举了。

3.Mybatis的插件,采用一个通用的Interceptor接口,配以@Intercepts、@Signature等注解,实现对多个组件的多种方法的拦截,看似非常灵活,在我看来其实是结构不够清晰,实际开发时,你会把对StatementHandler和ResultSetHandler的拦截增强放在一个类里面吗?不会是吧(会?你当单一职责原则、开闭原则都是狗屎吗),那有什么必要强制使用同一个接口呢?

另外,使用@Signature注解来设别需要被拦截的组件方法,如果注解有错,编译也是不会报错的,而只能等到运行时才能发现,再看上面的例子:

假设我针对3.3.0版本实现了一个插件:

延伸阅读

学习是年轻人改变自己的最好方式-Java培训,做最负责任的教育,学习改变命运,软件学习,再就业,大学生如何就业,帮大学生找到好工作,lphotoshop培训,电脑培训,电脑维修培训,移动软件开发培训,网站设计培训,网站建设培训学习是年轻人改变自己的最好方式