您的位置:首页 > 其它

mybatis和hibernate的异同

2015-07-30 11:02 183 查看
最近学习了mybatis,它也是一个ORM的持久层框架,但是它和hibernate还是有很大区别的,而且各有优缺点。

一、映射关系

hibernate实现了pojo和数据库表之间的映射,以及sql的自动生成和执行,程序员只需定义好了pojo和数据库的映射关系,就能通过hibernate提供的方法完成持久化的操作。程序员不需要对sql掌握熟练。

mybatis实现了pojo和sql的映射,通过映射配置文件,将sql需要的参数、返回值映射到指定的pojo。相对于hibernate而言,它需要程序员熟练掌握sql。

二、移植性

hibernate与数据库具体的关联只需在xml文件中配置即可,所有的hql语句与具体使用的数据库无关,移植性很好

mybatis中所有的sql语句都依赖具体的数据库写的,所以移植性差

三、sql优化

hibernate查询会将表中所有的字段查询出来,这一点会消耗性能,hibernate也可以自己写sql语句,但是这就破坏了hibernate开发的简洁性。hibernate具有自己的日志统计。

mybatis的sql是手动编写的,所以按照需求查询字段而且调整方便。mybatis本身不带日志统计,使用log4j进行日志记录。

四、缓存机制

相同点:Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓存方案,创建适配器来完全覆盖缓存行为。

不同点:Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后再在具体的表-对象映射中配置是那种缓存。

MyBatis的二级缓存配置都是在每个具体的表-对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。

两者比较:因为Hibernate对查询对象有着良好的管理机制,用户无需关心SQL。所以在使用二级缓存时如果出现脏数据,系统会报出错误并提示。

而MyBatis在这一方面,使用二级缓存时需要特别小心。如果不能完全确定数据更新操作的波及范围,避免Cache的盲目使用。否则,脏数据的出现会给系统的正常运行带来很大的隐患。
总结

hibernate的dao层开发比mybatis简单,mybatis需要维护sql的结果映射

hibernate数据库移植性好,mybatis的数据库移植性不好,不同的数据库要写不同的sql

hibernate有更好的二级缓存机制,mybatis提供的第三方缓存机制不佳

mybatis可以进行更为细致的sql优化,可以减少查询字段,性能更好一些。

mybatis简单易学,入门简单,hibernate学习门槛高。 mybatis的缺点是框架还比较简陋,功能尚有缺失,工作量比较大。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: