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

        在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。

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

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
MybatisHibernate都是Java持久化框架,它们的作用都是将Java对象映射到数据库中的表,从而实现对数据库的操作。但是它们的实现方式和特点有所不同。 1. 映射方式 Mybatis采用的是基于XML或注解的SQL映射方式,开发人员需要手动编写SQL语句,并将Java对象的属性映射到SQL语句中,从而实现对数据库的操作。 Hibernate则采用的是基于ORM(Object-Relational Mapping)的映射方式,它可以将Java对象与数据库表中的记录进行映射,不需要手动编写SQL语句,开发人员只需要在Java对象中定义好属性和关系即可。 2. 性能 Mybatis相对于Hibernate来说更加轻量级,因为它只需要编写简单的SQL语句即可完成对数据库的操作,不需要进行复杂的对象关系映射。因此,Mybatis的性能比Hibernate更快。 但是,Hibernate的ORM映射方式可以提高开发效率,减少代码量,同时也可以实现缓存和查询优化等功能,因此在某些场景下,Hibernate的性能可能更好。 3. 灵活性 Mybatis相对于Hibernate来说更加灵活,它允许开发人员自定义SQL语句,可以实现更加复杂的查询操作。而Hibernate则对SQL语句有一定的限制,因为它需要根据Java对象的属性和关系来生成SQL语句。 4. 学习难度 Mybatis相对于Hibernate来说学习难度较低,因为它的映射方式比较简单,开发人员只需要掌握SQL语句的编写和Java对象属性的映射即可。而Hibernate需要开发人员掌握一定的ORM知识和查询优化等技巧。 总的来说,MybatisHibernate各有优缺点,选择哪种框架要根据具体情况而定,如果对性能要求比较高,可以选择Mybatis,如果对开发效率和代码量要求比较高,可以选择Hibernate

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值