Hibernate好点还是MyBatis好点

到底哪个好点这个问题从来就没有标准答案,框架各有各的优点也各有各的缺点,我们就来比较一下Hibernate和MyBatis的优缺点:
Hibernate的优点
有着相当优秀的二级缓存机制,并且可以使用第三方的缓存。Hibernate是一个全自动的框架,完全通过对象关系模型来实现对数据库的操作,并且拥有完整的JavaBean对象来自动拼装SQL语句。拥有良好的数据库移植性。数据库的无关性很好,O/R映射能力很强,只需要写很少的代码,拥有急速的开发效率。Hibernate的缺点
Hibernate的sql基本都是自动生成,所以我们不能维护sql,虽然有HQL查询,但是HQL的局限性太大,有相当大的局限性;虽然Hibernate也支持原生的SQL查询,但是开发模式与ORM不同,所以使用上有相当大的不便。Hibernate的学习门槛很高,如果要精通更是难上加难,程序员如何设计O/R映射,在性能和对象模型之间如何取得平衡,以及怎样用好Hibernate方面需要的经验和能力都很强才行。Mybatis的优点
sql语句写在XML里面,便于同一的管理和优化,有效的解除SQL与代码的耦合。易于上手和掌握,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。拥有映射标签,支持对象和数据库的ORM字段关系映射。提供丰富的XML标签,支持编写动态SQL语句。执行效率高于Hibernate。Mybatis的缺点
当表和表中字段很多的时候,SQL工作量很大。SQL过于依赖数据库,直接导致了数据库移植性很差。由于XML里面的标签ID是唯一的,所以DAO中的方法不能重载。DAO层过于简单,所以对象组装的工作量很大。不支持级联更新和删除。日志功能很薄弱,只能做基本记录。编写动态SQL不方便调试,全靠经验编写。Hibernate好点还是MyBatis好点

图片来源:全景网

■网友
hi, 这篇文章已经说得比较详细了 Hibernate与 MyBatis的比较
■网友
我没有在项目中实际用过两者,只是大概了解过。 我的印象是: 如果你擅长或者亟需数据库优化,就选Batis;如果数据库方面一般,主要考量在Java层逻辑,就选Hibernate。
■网友
Hibernate 容易用,但要写的好,需要理解其原理,Mybatis相对比较简单,只有写好的sql即可
■网友
Mybatis失之简陋, ORM特性不完备, 写起来不省事.
Hibernate失之复杂, 配置纷繁复杂, 看着脑瓜子疼.
这两货都坑, 只是java开发者随大流的选择.
懂行的人自己写ORM, 比这两货好用太多.

■网友
Hibernate优点(1) 对象/关系数据库映射(ORM)它使用时只需要操纵对象,使开发更对象化,抛弃了数据库中心的思想,完全的面向对象思想(2) 透明持久化(persistent)带有持久化状态的、具有业务功能的单线程对象,此对象生存期很短。这些对象可能是普通的JavaBeans/POJO,这个对象没有实现第三方框架或者接口,唯一特殊的是他们正与(仅仅一个)Session相关联。一旦这个Session被关闭,这些对象就会脱离持久化状态,这样就可被应用程序的任何层自由使用。(例如,用作跟表示层打交道的数据传输对象。) (3) 事务Transaction(org.hibernate.Transaction)应用程序用来指定原子操作单元范围的对象,它是单线程的,生命周期很短。它通过抽象将应用从底层具体的JDBC、JTA以及CORBA事务隔离开。某些情况下,一个Session之内可能包含多个Transaction对象。尽管是否使用该对象是可选的,但无论是使用底层的API还是使用Transaction对象,事务边界的开启与关闭是必不可少的。 (4) 它没有侵入性,即所谓的轻量级框架(5) 移植性会很好(6) 缓存机制,提供一级缓存和二级缓存(7) 简洁的HQL编程2. Hibernate缺点(1) Hibernate在批量数据处理时有弱势(2) 针对单一对象简单的增删查改,适合于Hibernate,而对于批量的修改,删除,不适合用Hibernate,这也是OR框架的弱点;要使用数据库的特定优化机制的时候,不适合用HibernateHibernate 4.2 入门 这里有视频,题主可以看一下。


推荐阅读