Mybatis 浅析
除了我们所看到的,还有我们所未曾见到的。如果说 Spring MVC 做好了那一部分我们所见的,那么Mybatis 就能构筑起与我们所见之外的库中数据的种种联系,而我们,只需要使用好Mybatis 。我打算简单介绍一下Mybatis 的由来、优点及运行原理。
1. 由来
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录[1]。这是官方的一段说明。
不过依照我的理解,建议的说来的话,MyBatis的产生,是使学习者通过更低的学习成本,快速的上手对象关系映射。
2. 优点
想必读者也多多少少了解一些关于 hibernate的相关知识,网上的各位前辈已经从各个方面对比过两者。多去读读就会有自己的见解。在查找相关资料的时候,有两段话很好的从新手角度分析了两者。
就开发速度而言,Hibernate的真正掌握要比Mybatis 来得难些。 Mybatis 框架相对简单很容易上手,但也相对简陋些。个人觉得要用好 Mybatis 还是首先要先理解好Hibernate 。
比起两者的开发速度,不仅仅要考虑到两者的特性及性能,更要根据项目需求去考虑究竟哪一个更适合项目开发,比如:一个项目中用到的复杂查询基本没有,就是简单的增删改查,这样选择hibernate效率就很快了,因为基本的SQL 语句已经被封装好了,根本不需要你去写SQL 语句,这就节省了大量的时间,但是对于一个大型项目,复杂语句较多,这样再去选择hibernate就不是一个太好的选择,选择 Mybatis 就会加快许多,而且语句的管理也比较方便[2]。
Hibernate的缺点:
1、学习门槛高,精通门槛更高,程序员如何设计 ORM (Object Relational Mapping ,对象关系映射,是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换),在性能和对象模型之间如何取得平衡,以及怎样用好Hibernate方面需要的经验和能力都很强才行。
2、Hibernate 的 SQL 很多都是自动生成的,无法直接维护 SQL ;虽然有 HQL( Hibernate Query Language,提供更加丰富灵活、更为强大的查询能力) 查询,但功能还是不及 SQL 强大,见到报表等变态需求时, HQL 查询要虚,也就是说 HQL 查询是有局限的。 Hibernate 虽然也支持原生 SQL 查询,但开发模式上却与 ORM不同,需要转换思维,因此使用上有些不方便。总之写 SQL 的灵活度上Hibernate 不及 Mybatis [3]。
3.原理
(图片来自《深入理解mybatis原理》 MyBatis的架构设计以及实例分析)
看起来知识点不少,但一旦学会,你就会发现它们是一个整体。
不过从入门角度来说, Mybatis 运行原理就是:请求,经过 Controller再经过 Service 然后执行Service 中的相关方法并关联到Mapper 再执行mapper.xml中的SQL 语句,并返回结果。
接下来,就是尽你所能的去 Code 吧。
[1] http://www.mybatis.org/mybatis-3/zh/index.htmlmybatis
[2] http://www.cnblogs.com/inspurhaitian/p/4647485.htmlJAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结
[3] http://www.cnblogs.com/javacatalina/p/6590321.htmlMyBatis和Hibernate的优缺点对比。