【MyBatis】4:MyBatis与Hibernate的对比分析

来源:互联网 发布:防蓝光眼镜有必要知乎 编辑:程序博客网 时间:2024/05/18 17:04

        在MyBatis系列文章的第一篇, 提到了JDBC编程在实际开发中存在的诸多问题,后来介绍了MyBatis之后也没有分析,MyBatis是如何解决JDBC存在的问题的。在这篇博客开头我们先来一起看看,MyBatis是如何解决JDBC编程的问题的。当然,所有的ORM框架都是类似的,都是对JDBC的封装和优化。

        1、  数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。

        解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。

        2、  Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

        解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。

        3、  向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。

        解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。

        4、  对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历

        解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。

        很多人都喜欢将MyBatis和Hibernate这两个框架放在一起进行比较,可能这两个都是比较主流的持久层框架,又或许是在实际的项目开发中用的比较多,问题也比较多,因此就有了选择的需要。

        1 从ORM的定义上来讲,MyBatis和Hibernate不同,它不是一个完全意义上的的ORM框架,如果说Hibernate是自动化的ORM,那么MyBatis就是一个半自动化的框架,因为MyBatis需要程序员自己去编写sql语句,正因为如此,MyBatis引入了XML配置文件或者注解的方式来管理和配置要运行的sql语句,并且将java对象和sql语句映射成最终执行的sql,最后将sql的执行结果再映射成java对象,这样一来,灵活性极大地提高。

        2 在学习代价方面,MyBatis显然是要更简单,更加容易上手得多。程序员只要了解使用MyBatis框架开发的流程,并且会熟练编写sql语句,那么就可以快速的开发系统的业务代码。反观Hibernate,学习门槛之高,相信很多学习过Hibernate的小伙伴都深有体会,要想精通Hibernate并且能够对Hibernate进行一些灵活的处理和优化,将是难上加难,而且如何设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate需要很强的经验和能力才可。

        3 从开发效率来讲,MyBatis的开发效率要低于Hibernate,针对高级查询,大量的映射文件编写工作,让人很是抓狂。相反,Hibernate封装的非常好,不用程序员自己去写sql语句,只要像操作对象一下去操作数据库的数据,开发者无须关心sql的生成和结果映射,真正做到了ORM的关系和对象的映射,更加具有面向对象的味道。

        4 关于调优方案,MyBatis可以进行详细的sql优化设计,可以使用二级缓存机制,以及合理的session管理机制。但其最重要的优化点事sql优化,因为MyBatis的sql是手动编写的,所以我们可以按照我们想要的效果进行重新设计。而Hibernate HQL语句调优需要我们将sql语句打印出来,去分析进行去调整HQL语句,达到优化的目的。另外,Hibernate的调优也可以使用合理的缓存策略,尽量使用延迟加载特性,使用批量抓取以及进行合理的O/R映射的设计等方面进行。

       5 从扩展性上来说,显然是Hibernate更胜一筹,Hibernate与具体数据库的关联只需在xml文件中进行配置即可,所有的HQL语句与具体使用的数据库没有关系,因此移植性很好。而MyBatis的项目中所有的sql语句都是依赖所使用的数据库的,因此不同的数据库需要编写不同的映射文件,移植性不好。

        6 从性能上来说,Hibernate在JDBC上进行了一次封装,而MyBatis是基于原生的JDBC的,因此从最初的框架设计上,MyBatis天生就具有运行速度上的优势。另外在进行关联查询时,Hibernate为了保证POJO的数据完整性,需要将关联的数据全部加载,需要额外的查询更多的数据,而MyBatis加载的字段很干净,没有太多的冗余的字段,直接映射入关联中,从这点上来讲,MyBatis也是优于Hibernate的。

        7关于Hibernate和MyBatis的对比分析,说了不少了,其实使用哪个要看具体的使用场景,对于管理平台,需要展现的信息量较大,并发要求不高时,使用Hibernate比较好,而对于一些小的互联网网站,业务需求变动比较频繁,并发量也比较高,则适合使用MyBatis。

        总之,按照用户的需求在有限的资源环境下只要能做出维护性、扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。

2 0
原创粉丝点击